Tomcat コンテナーで実行されている Spring ベースの Web アプリケーションがあり、2 つの異なる構成ファイルを維持したいと考えています。
- src/main/resources/default.properties : 開発、統合テスト、および他のプロパティが設定されていない場合のデフォルトが含まれています
- .../tomcat/conf/app.properties:環境によって内容が異なり、default.properties をオーバーライドする必要があります
アプリケーションがTomcatで実行されているときに正常に機能するSpring構成があります
app-context.xml
<context:property-placeholder
ignore-resource-not-found="true"
ignore-unresolvable="true"
system-properties-mode="OVERRIDE"
location="classpath:default.properties,
file:${catalina.home}/conf/app.properties"/>
しかし、この構成を統合テストで使用しようとすると、Tomcat コンテナーの外部で、applicationContext の読み込みに失敗します。
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308)
...
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0' defined in null: Could not resolve placeholder 'catalina.home'
at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:287)
プロパティ catalina.home が現在のコンテキストで設定されていない場合、Spring に場所ファイル: ${catalina.home}/conf/app.properties を無視させる方法はありますか?