Предоставьте свойства ‹property-placeholder› среде Spring

У меня есть файл свойств, который я регистрирую в Spring через XML, используя элемент property-placeholder:

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

Я могу получить доступ к свойствам, используя аннотации @Value, например.

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

но мне также нужно получить доступ к свойствам через Spring Environment, например.

@Autowired
private Environment env;

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

getValue() здесь всегда возвращает null, даже для ключей, определенных в файле свойств, потому что кажется, что использование <property-placeholder> не предоставляет свойства среде. Есть ли способ заставить свойства, загруженные таким образом, быть доступными через среду?


person Doches    schedule 22.01.2014    source источник


Ответы (1)


Из Spring 3.2.x ссылка и введение сообщение в блоге:

До Spring 3.1 элемент пространства имен context:property-placeholder регистрировал экземпляр PropertyPlaceholderConfigurer. Это все равно будет делаться при использовании определения пространства имен spring-context-3.0.xsd. То есть вы можете сохранить регистрацию PropertyPlaceholderConfigurer через пространство имен, даже если используете Spring 3.1; просто не обновляйте xsi:schemaLocation и продолжайте использовать 3.0 XSD.

Итак, я предполагаю, что ваши XML-файлы не используют правильную версию XSD.

person nobeh    schedule 22.01.2014
comment
В настоящее время я использую spring-context-3.0.xsd в качестве XSD, но, как ни странно, переход на версию 3.1 XSD приводит к тому, что свойства отображаются в среде так, как я ожидал. Спасибо! - person Doches; 22.01.2014