我正在使用spring
加载属性文件 <bean id="appProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:/sample.properties" />
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>
当我使用
获取财产价值时 @Value("${testkey}")
工作正常。
但是当我试图使用env时
@Resource
private Environment environment;
environment.getProperty("testkey") // returning null
答案 0 :(得分:3)
PropertyPlaceholderConfigurer
不会将locations
的属性添加到Environment
。使用Java配置,您可以使用@PropertySource
来执行此操作。
答案 1 :(得分:1)
如果有人想在不使用@PropertySource
的情况下实现这一点使用ApplicationContextInitializer接口及其随附的contextInitializerClasses servlet上下文参数。
在web.xml中添加
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.test.MyInitializer</param-value>
</context-param>
并定义您的初始化程序
public class MyInitializer implements ApplicationContextInitializer<ConfigurableWebApplicationContext> {
public void initialize(ConfigurableWebApplicationContext ctx) {
PropertySource ps = new ResourcePropertySource(new ClassPathResource("sample.properties")); // handle exception
ctx.getEnvironment().getPropertySources().addFirst(ps);
}
}