如何以编程方式覆盖spring环境变量

时间:2019-08-16 15:16:03

标签: spring spring-boot

我在Spring Boot应用程序中使用bootstrap.properties文件。是否可以通过代码覆盖bootstrap.properties中定义的属性的值。

我了解我们可以通过在运行应用程序时将值作为运行时参数传递来覆盖属性。

试图通过System.setProperty()方法设置变量值。

org.springframework.core.env.Environment没有设置属性的任何方法。有没有一种方法可以在Spring Core Environment中添加新属性或覆盖现有属性。

1 个答案:

答案 0 :(得分:2)

是的。 Environment的所有当前实现也是ConfigurableEnvironment,它允许您获取其内部MutablePropertySources。获得MutablePropertySources之后,您可以使用它来配置任何属性的搜索优先级。

例如,要设置始终具有最高优先级的自己的属性,可以执行以下操作:

if(environment instanceof ConfigurableEnvironment) {
        ConfigurableEnvironment env = (ConfigurableEnvironment)environment;

        Map<String,Object> prop = new HashMap<>();
        prop.put("foo", "fooValue");
        prop.put("bar", "barValue");

        MutablePropertySources mps = env.getPropertySources();
        mps.addFirst(new MapPropertySource("MyProperties", prop)); 

}

然后environment.getProperty("foo")应该返回fooValue