2017-04-25 8 views
0

これまでのシナリオはこれまでと同じです。 spring-bootアプリケーションで、異なるスコープの異なるデータベースにアクセスする方法を教えてください。

@Bean 
    @ConfigurationProperties("database") 
    public DataSource database1DataSource() { 
    return DataSourceBuilder.create().build(); 
    } 

すぐ、SQLクエリをテストするために、私はこれを追加し、

@Bean 
    @ConfigurationProperties("testdatabase") 
    public DataSource myperksTestDataSource() { 
    return DataSourceBuilder.create().build(); 
    } 

同様に、IはPlatformTransactionManagerSqlSessionFactoryための2つの方法をそれぞれ作成しました。私はSpringブートがSqlSessionFactoryをピックアップし、2つを作成すると競合が発生し、IllegalStateExceptionにアプリケーションコンテキストをロードできませんでした。


状況

私は2つのデータベース接続、生産用と統合テストのために別のものを作成したいです。私はそれぞれapplication.ymlファイルの設定を作成しました。私は春に適切な設定を取りたいと思う。私は@Primaryで生産豆を注釈付き

を試してみました何


。それはうまくいった。私は春を走らせることができた。私は直接SqlSessionFactoryを使用していない


問題

、春はありません。 SqlSessionFactoryをプライマリとマークして別のものを書き込むと、それを呼び出すメソッドがないので役に立たない。

したがって、解決手段として、SqlSessionFactoryに異なるデータソースを条件付きで割り当てることを考えました。しかし、どのようにしてランタイムがテストであることがわかりますか?

+0

開始するときにちょうどそのとき、 'application.properties'と'アプリケーションtest.properties'を提供... '--spring.profiles.active = test'で両方のファイルがロードされます。または、短期的にはSpring Profile for this ... –

+0

@ M.Deinum実行時に別のURLを提供するために、彼はそれを必要としません。 – chrylis

+0

あなたはそれを行うことができますが、すべてのプロパティを指定することは一般的には過剰です。たとえば、接続プールのサイズや検証などのデフォルトを設定したい場合があります。 –

答えて

3

Javaの設定はまったく必要ありません。すべてをカットし、アプリケーションを起動するときに単にSPRING_DATASOURCE_URL環境変数に値を指定してください。起動し、そこに接続されたDataSourceを起動します。

+0

参考資料を提供してください。 –

+0

@ TarunMagantiエラボレーションはありません。これはまさにBootが構築した問題の一種です。組み込みの自動設定機能を標準的な方法で使用してください。 – chrylis

+0

'SPRING_DATASOURCE_URL'の値は正しく実行されている間スイッチとして送信する必要がありますか? –

0

のように単純に、異なるプロファイルを持つapplication.ymlを作成します。あなたはそれが過度に複雑にしている

+0

これは実行可能なソリューションのようです。共通のプロパティを個別に与える方法 –

+0

これは共通の要素で実行中にエラーが発生します –

+0

これは無効なymlです。重複キーは使用できません –

関連する問題