문제

I have a properties file that I'm registering with Spring through XML, using the property-placeholder element:

<context:property-placeholder location="classpath:foo.properties" />

I can access properties using @Value annotations, e.g.

@Value("${prefs.key}")
private String prefValue;

but I also need to access properties via the Spring Environment, e.g.

@Autowired
private Environment env;

public String getValue(String key) {
  return env.getProperty(key);
}

getValue() here always returns null, even for keys defined in the properties file, because it seems that using <property-placeholder> does not expose properties to the Environment. Is there a way to force properties loaded this way to be accessible via the Environment?

도움이 되었습니까?

해결책

From Spring 3.2.x reference and introduction blog post:

Prior to Spring 3.1, the context:property-placeholder namespace element registered an instance of PropertyPlaceholderConfigurer. It will still do so if using the spring-context-3.0.xsd definition of the namespace. That is, you can preserve registration of PropertyPlaceholderConfigurer through the namespace, even if using Spring 3.1; simply do not update your xsi:schemaLocation and continue using the 3.0 XSD.

So, my guess is that your XMLs are not using the proper XSD version.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top