状況に応じて異なるデータソースを指定する必要があるアプリケーションを開発しています。アプリケーションのテスト時に1つのデータベースを使用し、本番用に1つのデータベースを使用したいと思います。プロパティのファイルまたは環境変数を介してドライバークラスとログインの詳細を指定するようなもの。現在、詳細を変更してからアプリを再起動する必要があります。アプリケーションを再起動せずにこれらのプロパティを動的に変更する方法はありますか?
3 に答える
リソースタグ+ Springのシステムプロパティプレースホルダーを次のように使用できます...
<import resource="/resources/myDataSourceBeans-${runtime.environment}.xml"/>
あなたがする必要があるのは、適切なデータソースBeanを使用してプロジェクトのクラスパスに入れ、と呼ばれるシステムプロパティを定義し、/resources/myDataSourceBeans-prod.xml
それをまたはのいずれかに設定することです。/resources/myDataSourceBeans-test.xml
runtime.environment
test
prod
私の情報源をチェックした後、私はあなたにも役立つかもしれないこのブログエントリを見つけました。
[更新]ランタイムの変更をリクエストしたことに気づきました。私の答えは、実際には環境の分離についてのみです。これは、非本番システムから本番データソースにアクセスするべきではないため、通常は十分です。
JNDI データ ソースの使用。
Spring in Action から引用:
Spring アプリケーションは、WebSphere、JBoss などの JEE アプリケーション サーバー、または Tomcat などの Web コンテナー内で実行するためにデプロイされることがよくあります。これらのサーバーを使用すると、データ ソースを JNDI 経由で取得するように構成できます。このようにデータ ソースを構成する利点は、データ ソースをアプリケーションの外部で完全に管理できることです。アプリケーションは、データベースにアクセスする準備ができたときにデータ ソースを要求するだけですみます。さらに、アプリケーション サーバーで管理されるデータ ソースは、多くの場合、パフォーマンスを向上させるためにプールされ、システム管理者がホットスワップできます。
サンプル applicationContext-dataSource.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
<!-- D A T A S O U R C E S -->
<jee:jndi-lookup id="dataSource"
jndi-name="jdbc/myDatasource"
resource-ref="true" />
</beans>
お役に立てれば。
実行時に変更したくない場合 (テスト/本番切り替えの理由で非常にまれです)、DelegatingDataSourceを使用して、依存するすべての Bean を変更せずにターゲットを変更できます。