Spring:@PropertySource

时间:2016-02-04 09:28:36

标签: java spring

考虑以下设置:

@Configuration
@PropertySource("classpath:common.properties")
public class CommonConfig {

}

现在让我们假设我想要在这个配置中加载的属性源和一些属性源背后有一些非平凡的逻辑,我想为此使用属性API:

@Configuration
public class CommonConfig {

    @Autowired
    private ConfigurableEnvironment env;

    public void loadCommonConfig() {
        // Determine what properties to load and how...
        env.getPropertySources().addLast(...);
    }

}

我不明白我应该如何通知Spring我对loadCommonConfig感兴趣的@PropertySource在生命周期中被调用@Bean。只需返回属性angular.js似乎无效。

1 个答案:

答案 0 :(得分:4)

您必须为PropertySourcesPlaceholderConfigurer注释声明@PropertySource静态bean才能工作(或使用将为您声明的SpringBoot)。

您可以使用方法setLocations(...)声明此bean时手动加载属性文件。

以下是一个例子:

@Configuration
public class CommonConfig {
...
        @Bean
        public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
            PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
            ppc.setLocations(new FileSystemResource("/etc/webapp_properties/security-token.properties"),
                    new ClassPathResource("config/WebApp.properties"),
                    new ClassPathResource("config/" + System.getenv("CURRENTENV") + "/WebApp.properties"));
            return ppc;
        }
...
}