【问题标题】:Spring Environment class - loading properties value with dynamic keySpring Environment 类 - 使用动态键加载属性值
【发布时间】:2019-06-17 02:11:59
【问题描述】:

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 属性。

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

【问题讨论】:

  • 我认为你应该为不同的环境有不同的属性文件,然后你就不会费心连接一些像“dev”或“uat”这样的术语了。
  • 看起来您正在解决 Spring Boot 中的默认支持。使用框架不要乱用它。
  • 这两个不同的项目是分开的吗?
  • @AbdelghaniRoussi 是的
  • 您说过“当我调试 Test2.java 时,环境具有项目 A 属性而不是项目 B 属性。”你确定双方的内容不一样?

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


【解决方案1】:

你可以在 spring 中使用 Profiles,并且有多种方法可以做到:

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

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

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

有更多的选择可以做同样的事情

注意:我无法在回复中正确格式化 yaml 代码,因此我附上了图片

【讨论】:

  • 您好,如果您对此问题有任何想法,请帮帮我。
【解决方案2】:

花了很多时间后,我们才知道 Environment 正在加载两个项目的属性。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 2011-02-02
    • 2023-03-31
    • 2012-07-08
    • 2017-12-11
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多