5

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?

Doches
  • 3,276
  • 2
  • 19
  • 26

1 Answers1

3

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.

nobeh
  • 9,784
  • 10
  • 49
  • 66
  • 1
    I'm currently using `spring-context-3.0.xsd` as the XSD -- but bizarrely, switching to the 3.1 version of the XSD causes properties to be exposed to the Environment in the way I'd expected. Thanks! – Doches Jan 22 '14 at 09:07