env.getProperty不工作Spring PropertyPlaceholderConfigurer

时间:2014-05-27 17:54:00

标签: java spring spring-4

我正在使用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

2 个答案:

答案 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);
    }
}

参考:Spring 3.1 M1: Unified Property Management