0

ApplicationContextInitializer を実装し、Spring プロファイルを環境に追加することで、Spring プロファイルを動的にロードできます。

問題は、私が支援しているプロジェクトの 1 つで、データベースに保存されているプロパティを使用していることです。データベースから追​​加のアクティブな Spring プロファイルを表すプロパティをロードし、それを環境に注入する方法。ApplicationContextInitializer では、アプリケーション コンテキストがまだ完全に初期化されていないため、Spring Bean を使用できません。データベースへの低レベル アクセスが唯一の選択肢ですか?

4

1 に答える 1

0

SpringPropertyPlaceholderConfigurerは、必要なプロパティ ファイルである場所プロパティで初期化する必要があります。ただし、このクラスはjava.util.Propertiesオブジェクトで初期化することもできます。

非推奨のプロジェクト Spring-Modules から、メソッドに渡すことができる通常のオブジェクトのように動作するように、Springクラスを実装するこのクラスをここで見つけることができます。InitializingBeanFactoryBeanjava.util.PropertiesPropertyPlaceholderConfigurer.setProperties()

このようにorg.apache.commons.configuration.DatabaseConfigurationして、Properties オブジェクトのように機能しますが、データベースからプロパティを読み取ることを利用できます。たとえば、次の Bean 構成について考えてみます。

<bean 
    name="MyDatabaseConfiguration"
    class="org.apache.commons.configuration.DatabaseConfiguration">

    <constructor-arg type="javax.sql.DataSource" ref="someDataSource"/>
    <constructor-arg index="1" value="SCHEMA.PROPERTIES_TABLE"/>
    <constructor-arg index="2" value="KEY"/>
    <constructor-arg index="3" value="VALUE"/>
</bean>

ここで、arg 1 はプロパティを含むテーブル、arg 2 はキー列、arg 2 は値列です。

したがって、次のように非常によく似たカスタム クラスを作成して、次のようにCommonsConfigurationFactoryBean使用できます。

<bean 
    name="PropertyPlaceholderConfigurer"     
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties" ref="MyCustomClass"/>
</bean>

MyCustomClassラップに使用するクラスはどこにありますかMyDatabaseConfiguration

それが役に立てば幸い。

于 2015-09-11T10:21:17.207 に答える