在Spring中将@PropertySource限制为特定的@Configuration类

时间:2018-05-01 21:29:58

标签: spring-boot configuration-files spring-annotations

我有以下属性文件:

  • application.properties - Base spring config
  • common.properties - Common config
  • servicea.properties - 服务特定配置
  • password.properties - 密码配置

根据最后三个文件,我有3个<Name>Property类,格式如下。

@Configuration
@PropertySource("file:<filepath>")
public class ServiceAProperties {

    private final Environment env;

    @Autowired
    public ServiceAProperties (Environment env) {
        this.env = env;
    }

    public String getTest() {
        String test = env.getProperty("application.test"); // Accessible - Not Intended
        test = env.getProperty("common.test");             // Accessible - Not Intended
        test = env.getProperty("servicea.test");           // Accessible - Intended
        test = env.getProperty("password.test");           // Accessible - Not Intended
        return env.getProperty("servicea.test");
    }
}

出于某种原因,即使我只有标有其特定属性文件路径的各个Property类,它们也会从其他文件中拾取路径并将其添加到env中。

如何确保仅从我指定的文件生成环境?

2 个答案:

答案 0 :(得分:1)

@PropertySource的{​​{3}}说:

  

为注释提供方便和声明的添加机制   一个属于Spring环境的PropertySource。要结合使用   使用@Configuration类。

这意味着只有一个Spring环境。当您有多个使用此批注注释的类时,它们将始终为同一个环境做出贡献,因为只有一个。

因此,为了回答您的问题,在您的情况下,环境将始终填充来自具有@Configuration@PropertySource注释的所有类的数据。

为了使用您指定的数据填充环境,您可以使用spring docs。您可以分离多个配置文件中的数据,并选择将激活的配置文件(以及可在环境中访问的数据)。

答案 1 :(得分:0)

我正在分享我自己的解决方案,因为我无法找到可接受的答案。

使用new ResourcePropertySource("classpath:<location>")可以使用各自的对象加载多个单独的属性文件。

加载后,可以使用与propertiesObj.getProperty("propKey")

之前相同的方式访问配置