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 ofPropertyPlaceholderConfigurer
. It will still do so if using thespring-context-3.0.xsd
definition of the namespace. That is, you can preserve registration ofPropertyPlaceholderConfigurer
through the namespace, even if using Spring 3.1; simply do not update yourxsi:schemaLocation
and continue using the 3.0 XSD.
So, my guess is that your XMLs are not using the proper XSD version.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With