【问题标题】:Spring Environment: order of systemProperties and systemEnvironmentSpring Environment:systemProperties 和 systemEnvironment 的顺序
【发布时间】:2018-09-01 00:54:18
【问题描述】:

是否可以从底层 PropertySource 控制 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"));
    }
}

【问题讨论】:

标签: spring spring-environment


【解决方案1】:

已找到答案,不便之处敬请见谅:

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

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

system properties
system environment variables 

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 2018-03-02
    • 1970-01-01
    • 2018-07-25
    • 2019-07-15
    • 2016-10-30
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多