问题
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?
回答1:
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.
来源:https://stackoverflow.com/questions/21277188/expose-property-placeholder-properties-to-the-spring-environment