1

次の構造を持つSpringMVCWebアプリケーションがあります。

myapp
    |-META-INF
    |-WEB-INF
        |-classes
        |   |-conf
                |-application.properties
        |-lib
        |   |-externalApp.jar
        |       |-conf
        |           |-applicationContext.xml
        |
        |-applicationContext.xml
        |-myapp-servlet.xml

で、以下に示すように、jarファイルにあるファイルをmyapp/WEB-INF/applicationContextインポートしました。applicationContext.xml

<import resource="classpath:WEB-INF/conf/applicationContext.xml" /> 

インポートされたリソースのBeanは正常に機能し、Webアプリケーションのコントローラー/サービスクラスで確認できます。

私が抱えている問題は、jarファイル内のコンテキストファイル(つまりWEB-INF/lib/externalApp.jar/applicationContext.xml)にプロパティファイルをロードするための構成があることです。プロパティファイルがwebappにあるように、プロパティはWebアプリケーションで設定する必要があります。jarファイルのコンテキストファイルの設定は次のようになります。

上記のプロパティでWebアプリケーションにあるプロパティファイルをロードしたいので、その値を次のように設定します。

<bean class="com.myapp.ExternalAppPropertyPlaceholderConfigurer">
        <property name="location" value="classpath:conf/application.properties" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

上記の設定では、これらのプロパティが使用可能であることを期待するjarファイル内のクラスは、引き続きプロパティにアクセスできません。

私が推測する質問は、WEB-INF/classes/conf/application.propertiesにあるjarファイル内のオブジェクトにアクセスできるようにするためのプロパティファイルを取得する方法ですWEB-INF/lib/externalApp.jar

私が取得しているスタックトレースを見ると、インポートされたコンテキストファイルで参照されているオブジェクトが最初にロードされてから、プロパティがロードされているように見えますが、これは私が望んでいないことです。

ありがとう。

4

1 に答える 1

1

次のようにclasspath*:プレフィックスを使用できます

<bean class="com.myapp.ExternalAppPropertyPlaceholderConfigurer">
    <property name="location" value="classpath*:conf/application.properties" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

編集

は Web アプリにあるためconf/application.properties、Web アプリの applicationContext で定義する必要があります (現在のように jar ではありません)。そして、jar の applicationContext をインポートする前に定義します。つまり、Web アプリの applicationContext に次のようなものを入れます。

<bean class="com.myapp.ExternalAppPropertyPlaceholderConfigurer">
    <property name="location" value="classpath:conf/application.properties" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
<import resource="classpath*:/conf/applicationContext.xml" />

jar applicationContext からプロパティの宣言を削除します。

于 2013-01-16T20:46:04.613 に答える