我有以下属性文件:
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中。
如何确保仅从我指定的文件生成环境?
答案 0 :(得分:1)
@PropertySource
的{{3}}说:
为注释提供方便和声明的添加机制 一个属于Spring环境的PropertySource。要结合使用 使用@Configuration类。
这意味着只有一个Spring环境。当您有多个使用此批注注释的类时,它们将始终为同一个环境做出贡献,因为只有一个。
因此,为了回答您的问题,在您的情况下,环境将始终填充来自具有@Configuration
和@PropertySource
注释的所有类的数据。
为了使用您指定的数据填充环境,您可以使用spring docs。您可以分离多个配置文件中的数据,并选择将激活的配置文件(以及可在环境中访问的数据)。
答案 1 :(得分:0)
我正在分享我自己的解决方案,因为我无法找到可接受的答案。
使用new ResourcePropertySource("classpath:<location>")
可以使用各自的对象加载多个单独的属性文件。
加载后,可以使用与propertiesObj.getProperty("propKey")