System Environment 指的是操作系统的环境变量,而 System Properties 指的是java 程序jvm的系统变量
System Environment
1 | // 获取全部的环境变量 |
System Properties
1 | // 获取所有的环境变量 |
设置jvm的系统变量有两种方式:
- 通过
java -Dkey=value
参数设置,如果value有空格,需要用双引号括起来 - 在代码里通过
System.setProperty(key, value)
进行设置
Spring Environment
在Spring通过EnvironmentCapable接口中的**getEnvironment()**方法可以获取当前环境变量。
如上图所示,ApplicationContext实现了EnvironmentCapable接口,具体的实现方法是在AbstractApplicationContext中。
关于Environment接口类图如下图所示:
Environment创建
getEnvironment()
AbstractApplicationContext类
1 | public ConfigurableEnvironment getEnvironment() { |
createEnvironment()
AbstractApplicationContext类
1 | protected ConfigurableEnvironment createEnvironment() { |
因为StandardEnvironment继承自AbstractEnvironment,将调用父类的构造方法。
AbstractEnvironment()
AbstractEnvironment类
1 | public AbstractEnvironment() { |
AbstractEnvironment(MutablePropertySources propertySources)
AbstractEnvironment类
1 | protected AbstractEnvironment(MutablePropertySources propertySources) { |
customizePropertySources(MutablePropertySources propertySources)
StandardEnvironment类
1 |
|
优先级结论
在调用getProperty()方法时从propertySources集合按照添加顺序获取值,可以看出来SYSTEM_PROPERTIES优先级高于SYSTEM_ENVIRONMENT