4

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 を無視させる方法はありますか?

4

3 に答える 3

0

default variant一部の PP 値が解決されない可能性があるコンテキストがあるため、プロパティにa を使用してみることができます。

file:${catalina.home:}/conf/app.properties

この場合、 Tomcat の場合のように、catalina.homeプロパティがない場合、パス プレフィックスは空の文字列に解決されます。System.getProperties()

その後、ignore-resource-not-found="true"が処理を行います。

于 2015-01-09T13:54:48.157 に答える
0

ignore-resource-not-foundこの問題を解決するように設定できます。

これを試して:

<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"/>

spring-context.xsd のコード スニペット:

<xsd:attribute name="ignore-resource-not-found" type="xsd:boolean" default="false">
            <xsd:annotation>
                <xsd:documentation><![CDATA[
    Specifies if failure to find the property resource location should be ignored.
    Default is "false", meaning that if there is no file in the location specified
    an exception will be raised at runtime.
                ]]></xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
于 2015-01-09T13:32:46.557 に答える