从Spring 4中的Resource和System Variables中读取属性值

时间:2017-10-08 06:45:36

标签: java spring spring-mvc

我正在尝试配置我的Spring 4应用程序,以便能够使用@Value注释读取属性值。 我需要能够从.properties文件以及system properties中读取值。

要从.properties文件阅读,我使用@Value("${my.propery.name}")语法和@PropertySource("classpath:my.properties")

对于从系统属性中读取,我使用的是@Value("#{systemProperties['myVariableName']}")语法。

在我的ApplicationConfig.java类中,这是我同时拥有的主应用程序配置文件:

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

@Bean
public static PropertyPlaceholderConfigurer propertyConfigurer() {
return new PropertyPlaceholderConfigurer();
}

如果同时指定了两个配置器,我会遇到一个问题,有时这些值会被解析,有时则不会(我得到Could not resolve placeholder例外)。

仅配置PropertyPlaceholderConfigurer时,我只能从.properties文件中读取。

仅配置PropertySourcesPlaceholderConfigurer时,我只能从系统属性中读取。

从两种资源中读取的最佳配置是什么?

1 个答案:

答案 0 :(得分:0)

<强>更新 我设法通过仅注册PropertyPlaceholderConfigurer bean并将.properties文件路径指定为Resource来解决此问题:

@Bean
public static PropertyPlaceholderConfigurer propertyConfigurer() {
 PropertyPlaceholderConfigurer ppc= new PropertyPlaceholderConfigurer();
 ppc.setSearchSystemEnvironment(true);
 final Resource resource = new ClassPathResource("my.properties");
 ppc.setLocation(resource);
 return ppc;
}