1. ホーム
  2. java

[解決済み] 複数のプロジェクト/モジュールで複数のプロパティファイルを使用する(PropertyPlaceholderConfigurer 経由)。

2022-10-27 17:33:34

質問

現在、複数のプロジェクト/モジュールに分割されたアプリケーションを作成しています。例えば、以下のようなモジュールを例にとってみます。

  • myApp-DAO
  • myApp-jabber(マイアップジャバー

各モジュールは独自のSpringコンテキストxmlファイルを持っています。DAOモジュールでは、PropertyPlaceholderConfigurerがあり、必要なDB接続パラメータを含むプロパティファイルを読み込みます。jabberモジュールでは、jabber接続のプロパティのためのPropertyPlaceHolderConfigurerも持っています。

さて、myApp-DAOとmyApp-jabberを含むメインアプリケーションが登場します。すべてのコンテキストファイルを読み込んで、1つの大きなSpringコンテキストを開始します。残念ながら、1つのコンテキストには1つのPropertyPlaceholderConfigurerしかないようで、最初にロードされたモジュールが接続パラメータを読み込むことができます。もう1つのモジュールは、"Could not resolve placeholder 'jabber.host'" のようなエラーで例外を投げる。

問題が何であるかはなんとなくわかりますが、解決策、または私の使用例に対するベストプラクティスがわかりません。

各モジュールがそれ自身のプロパティファイルをロードできるようにするには、どのように構成したらよいでしょうか。現在、私は PropertyPlaceHolderConfigurer を個別のコンテキスト ファイルから移動し、それらをメイン アプリケーションのコンテキストにマージしました (単一の PropertyPlaceHolderConfigurer ですべてのプロパティ ファイルをロードします)。これは、daoモジュールを使用するすべての人が、自分のコンテキストにPropertyPlaceHolderConfigurerが必要であることを知る必要があるため、しかし、最悪です。

私は、stackoverflow コミュニティからのソリューション/アイデアを聞きたいと思っています。

どのように解決しましたか?

すべてのプレースホルダーが、関係するそれぞれのコンテキストで、解決できないキーを無視していることを確認すれば、これらのアプローチの両方が機能します。たとえば

<context:property-placeholder
location="classpath:dao.properties,
          classpath:services.properties,
          classpath:user.properties"
ignore-unresolvable="true"/>

または

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:dao.properties</value>
                <value>classpath:services.properties</value>
                <value>classpath:user.properties</value>
            </list>
        </property> 
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>