多个PropertyPlaceholderConfigurers的前缀属性

时间:2016-08-30 10:05:51

标签: spring properties

我想使用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;

那么如何指定文件,而不仅仅是键?

1 个答案:

答案 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:)