2016-04-04 1 views
2

Использование пружины 3.2.5. У меня есть веб-проект с двумя контекстами приложения (один из родителей другого).Весенняя среда не может разрешать заполнители

Я настроил в XML, заполнитель configurer так:

<context:property-placeholder location="WEB-INF/properties/*.properties, classpath:local.config.properties, file:${global.config.file}" 
           ignore-unresolvable="true" 
           ignore-resource-not-found="false"/> 

переменный «global.config.file» представляет собой путь к файлу, указанному в аргументах JVM, принятых для запуска Tomcat.

В моем коде, я могу успешно вводить значения из этих файлов, как это:

@Value("${blabla}") 
private String blabla; 

Однако, когда я пытаюсь разрешить заполнителей программно, через объект окружающей среды весны, заполнители не заменяются реальными значениями:

@Inject 
Environment env; 
// ... 

public void test() { 
    String blabla = env.resolvePlaceholders("${blabla}"); 
} 

The BlaBla переменные будут содержать это нерешенный значение: "$ {BlaBla}" Также делает:

env.getProperty("blabla"); 

возвращается null. Обратите внимание, что я использую контекстную местоположение схемы выше 3.0:

http://www.springframework.org/schema/context/spring-context-3.2.xsd 

Может кто-то помочь мне понять, что я не хватает? Или любая подсказка о том, как отлаживать дальше?

+0

Там нет ничего, чтобы отладить, как она работает, как задумано. Зарегистрированный 'PropertySourcesPlaceholderConfigurer' использует среду для поиска, которую он не может найти из загруженных файлов. Он не добавляет загруженные свойства в «Среда», если вы хотите, чтобы вам нужен класс '@ Configuration', и добавьте аннотацию' @ PropertySource', поскольку они добавлены в «Среда». –

+0

Все, что вы хотите, это возможность получить ресурс программно? Если это так, проверьте [this] (http://stackoverflow.com/questions/13265545/using-reloadableresourcebundlemessagesource-in-annotations-injection). Я использую его таким образом в настоящее время и работает для файлов свойств. – dambros

+0

Да, я хочу разрешить строковые выражения с использованием заполнителей во время выполнения. M. Deinum: Означает ли это, что если я заменил тег пространства имен ручным определением PropertySources, он будет работать? Мне тоже нужно работать с весенними конфигурационными файлами. – baraber

ответ

0

Попробуйте с classpath*:, например:

<context:property-placeholder location="classpath*:WEB-INF/properties/*.properties, classpath*:local.config.properties, file:${global.config.file}" 
          ignore-unresolvable="true" 
          ignore-resource-not-found="false"/> 
Смежные вопросы