我想使用Spring的PropertyPlaceholderConfigurer
来读取两个属性文件。我可以使用以下标记之一加载每个标记:
<context:property-placeholder location="class path:com/myapp/internal.properties"/>
<context:property-placeholder location="file://${settings.location}/external.properties"/>
我不允许更改这两个文件中的密钥。两个文件都可能包含具有相同密钥的条目。
我需要注入特定文件的值。
//Pseudocode of injecting a property of a specific file
@Value("${internal.properties:my.key}")
String internalValue;
@Value("${external.properties:my.key}")
String externalValue;
那么如何指定文件,而不仅仅是键?
答案 0 :(得分:1)
如果需要,你必须将它翻译成xml:
public class InternalPropertyPlaceholderConfigurer extends PropertySourcesPlaceholderConfigurer{
public UploaderPropertyPlaceholderConfigurer() {
setLocations(new ClassPathResource[]{
new ClassPathResource("com/myapp/internal.properties"),
});
setPlaceholderPrefix("$internal{");
setPlaceholderSuffix("}");
}
并在spring中注册(或在上面的类中使用@Component):
@Bean
public InternalPropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new InternalPropertyPlaceholderConfigurer();
}
这样你应该能够用这种相当丑陋的语法注入属性:
@Value("$internal{your.key}")
private String value;
如果有效,那么只需为外部添加第二个bean:)