System.getProperties()和System.getenv()的应用

参数介绍

在这里插入图片描述

  • vm option : jvm参数
  • Program arguments : 程序参数(空格分隔),main 方法的 args 参数
  • Environment variables : 环境变量

在程序启动时会执行StandardEnvironment#customizePropertySources

public class StandardEnvironment extends AbstractEnvironment {
  
  /** System environment property source name: "systemEnvironment". */
  public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";

	/** JVM system properties property source name: systemProperties. */
	public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";
  
  protected void customizePropertySources(MutablePropertySources propertySources) {
		propertySources.addLast(
				new PropertiesPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));
		propertySources.addLast(
				new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment()));
	}
}

getSystemProperties()方法是通过System.getProperties()来获取系统属性

getSystemEnvironment()方法是通过System.getenv()来获取环境变量,包括在 Environment variables 中自定义的变量

public abstract class AbstractEnvironment implements ConfigurableEnvironment {
  public Map<String, Object> getSystemProperties() {
		return (Map) System.getProperties();
	}

	public Map<String, Object> getSystemEnvironment() {
		if (suppressGetenvAccess()) {
			return Collections.emptyMap();
		}
		return (Map) System.getenv();
	}
}

业务拆分

业务场景:同一套代码,需要部署成两个系统,场景不同,业务需要做隔离,业务在A系统支持,在B系统不支持。

定义配置类,配置类会根据env加载,如果env不存在,就不会加载。

@Configuration
@ConditionalOnProperty(name = "env")
public class AStartUpConfig {
}

定义支付业务Controller

@RequestMapping("/api/pay")
@ConditionalOnMissingBean(AStartUpConfig.class)
public PayController extends BaseController {
}

A系统不支持支付业务,只需要添加环境变量env即可,AStartUpConfig就会加载,PayController不会被加载

B系统支持支付业务,不添加环境变量env即可,AStartUpConfig就不会加载,PayController加载

环境变量,加上@ConditionalOnProperty@ConditionalOnMissingBean注解的配合,实现拆分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值