我正在尝试配置我的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
时,我只能从系统属性中读取。
从两种资源中读取的最佳配置是什么?
答案 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;
}