У меня есть приложение, в котором заполнитель свойств используется для чтения свойств, настроенный в applicationContext.xml
:
...
<context:property-placeholder
location="classpath*:META-INF/spring/*.properties"/>
...
Приложение запускается в Tomcat и использует параметр, определенный в context.xml.
Приложение обращается к этому параметру как обычные свойства (@Value(${cfma.applicationUrl})
). Это работает
В моих тестовых случаях у меня нет свойств tomcat, поэтому я хочу добавить их «вручную» в контекст приложения. Но также загрузить нормальный applicationContext.xml
testContext.xml:
<import resource="classpath:/META-INF/spring/applicationContext.xml" />
<context:property-placeholder properties-ref="simulatedTomcatProperties"/>
<util:properties id="simulatedTomcatProperties">
<prop key="cfmt.applicationBaseUrl">localhost:8080/cfmt</prop>
</util:properties>
Теперь у меня есть два контекста: свойство-заполнитель, и это не работает (конечно) - Итак, мой вопрос: кто может расширить свойства в «обычном» свойстве-заполнителе в моем тесте?
Подробнее о том, что мне нужно:
- Продуктивная среда (а также среда разработки) определяет некоторые свойства с помощью параметра Tomcat. Поэтому они не включены ни в один файл свойств, но, к сожалению, к ним можно получить доступ как к обычным свойствам (
@Value(${cfma.applicationUrl})
). Более того, не должно быть никакого Fallback, если свойства не определены в Tomcat, приложение не должно запускаться!
- В тестовых примерах (использующих контекст весны) я должен кое-как вставить свойство (cfma.applicationUrl), чтобы его можно было вставить в аннотированные переменные.
Но если я добавлю второй
context:property-placeholder
, они не будут объединены:
@ См. Комментарии к https://jira.springsource.org/browse/SPR-4881 - они объясняют это поведение.
Когда я говорю о параметре Tomcat, я говорю о чем-то вроде этого:
context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Parameter name="cfmt.applicationBaseUrl"
value="http://localhost/demoApp" override="false"/>
</Context>