0

是否可以从基础 PropertySources 控制 Spring Environment 的解析顺序?

例如。

我有操作系统环境变量

ENV key=os

并使用系统环境变量运行 java

java -Dkey=system

在 A 类的 bean 上调用方法 m 的输出是什么?如何更改扫描 SystemEnvironmentPropertySource 或 MapPropertySource [name='systemProperties'] 的顺序?

import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import javax.inject.Inject;

@Component
class A{
    @Inject
    private Environment environment;

    public void m(){
        System.out.println(environment.getProperty("key"));
    }
}
4

1 回答 1

0

我找到了答案,很抱歉给您带来不便:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/env/StandardEnvironment.html

```` 除了 ConfigurableEnvironment 的常用功能(如属性解析和配置文件相关操作)外,此实现还配置了两个默认属性源,按以下顺序搜索:

system properties
system environment variables 

也就是说,如果 JVM 系统属性以及当前进程的一组环境变量中都存在键“xyz”,则系统属性中的键“xyz”的值将从对 environment.getProperty 的调用中返回(“xyz”)。默认情况下选择此顺序是因为系统属性是每个 JVM 的,而环境变量在给定系统上的许多 JVM 中可能是相同的。给予系统属性优先权允许在每个 JVM 的基础上覆盖环境变量。

这些默认属性源可能会被删除、重新排序或替换;并且可以使用 AbstractEnvironment.getPropertySources() 提供的 MutablePropertySources 实例添加其他属性源。有关使用示例,请参阅 ConfigurableEnvironment Javadoc。````

于 2018-03-22T14:33:32.997 回答