Spring Environment类-使用动态键加载属性值

时间:2019-01-23 13:11:36

标签: spring spring-boot spring-mvc properties environment

Environment类在动态加载属性方面是否有限制?

@Autowired
private Environment environment;

environment.getProperty("spring.data".concat(dynamickey);

我有2个相关项目。 这两个项目都具有applicationcontext.xml和提到的类路径,用于基于dev,uat,live ...等环境读取属性文件。

在一个类的两个项目中,我都初始化了Environment类以读取属性。 不幸的是,在两个地方环境类都加载了相同的属性。如果我进行调试,我可以在两个地方看到相同的属性。

我的要求是在两个地方以不同的方式加载属性。

有人可以帮我解决问题吗?

有关上述查询的更多信息:

我有2个项目

Project A:
  src
     java
        ---- Test1.java
     resources
        ----dev.properties
        ----uat.properties
        ----live.properties
        ----applicationcontext.xml -- contains bean with classpath

Project B:
  src
     java
        ---- Test2.java
     resources
        ----dev.properties
        ----uat.properties
        ----live.properties
        ----applicationcontext.xml -- contains bean with classpath

Test1.java包含

class Test1{
   @Autowired
   private Environment environment;

  public void abc(String val){
    String aaa=environment.getProperty("address.".concat(val));
  }

}

Test2.java包含

class Test2{
   @Autowired
   private Environment environment;

  public void abc(String val){
    String bbb=environment.getProperty("address.".concat(val));
  }

}

当我调试Test2.java时,环境中具有项目A属性而不是项目B属性。

有什么方法可以将Project A属性加载到Test1.java环境对象,并将Project B属性加载到Test2.java环境对象。

2 个答案:

答案 0 :(得分:0)

您可以在春季使用“个人档案”,并且有多种方法:

1。使用基于属性的配置文件:

创建多个属性文件(application-dev.properties,application-prod.properties,其中application.properties作为默认配置文件),然后使用-Dspring.profiles.active = dev运行您的应用程序。

2。使用基于Yaml的配置文件(application.yml):

enter image description here

有更多的选项可以做相同的事情

注意:我无法在响应中正确设置yaml代码的格式,这就是我附加图片的原因

答案 1 :(得分:0)

花了很多时间之后,我们才知道环境正在从两个项目中加载属性。

如果属性中的键不同,则不会有任何问题;如果属性文件中的键相同,则将从第一个加载的属性文件中获取属性。