Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Expose <property-placeholder> properties to the Spring Environment

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?

like image 868
Doches Avatar asked Oct 21 '22 16:10

Doches


1 Answers

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.

like image 90
nobeh Avatar answered Oct 26 '22 22:10

nobeh