2017-09-04 12 views
0

2次データベースがデプロイされた環境に存在する場合、リポジトリはそのリポジトリからデータを取得できるように、存在しない場合、アプリケーションはプライマリデータベースだけで正常に動作し、リポジトリはアプリケーションがこのデータソースが利用できないことを知ることができるように動作します。Springブート2番目のデータソースを追加する方法

私は間違いなくこのタイプのものを達成する方法を考えることができますが、これを達成するためのより直接的な構成タイプの方法があるのだろうかと思います。または、パターンタイプの取り扱いが望ましい場合はそれが望ましい。

答えて

1

2つのデータベース設定を実装し、@Primary注釈でそれらの1つに注釈を付けるだけで、複数のデータベースをきれいに処理できます。

@Bean(name = "mainDataSource") 
@Primary 
public DataSource mainDataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(driver); 
    dataSource.setUrl(url); 
    dataSource.setUsername(username); 
    dataSource.setPassword(password); 
    return dataSource; 
} 

セカンダリデータベースでは、ほとんど同じものを作成できますが、@Primaryアノテーションは入れません。

@Bean(name = "secondaryDataSource") 
public DataSource secondaryDataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(driver); 
    dataSource.setUrl(url); 
    dataSource.setUsername(username); 
    dataSource.setPassword(password); 
    return dataSource; 
} 

あなただけのDataSource Beanで@Primary注釈を配置する必要がありませんが、任意の豆で、あなたのデータベースに接続するために使用します。

これを実行した後、EntityManagerや@Qualifierで通常使用する他の接続マネージャに注釈を付けるだけです。

@Autowired 
@Qualifier("mainEntityManager") 
private EntityManager mainDatabase; 

@Autowired 
@Qualifier("secondEntityManager") 
private EntityManager secondDatabase; 

私の場合、バックステージでこれを管理するクラスを作ることを好みます。 完全な例はmy article on linkedin.です。example code on GitHub

+0

ありがとうございます。既存のデータベースではない第2のデータベースのケースをどうすれば処理できますか?春はまだうまくロードされますか?プログラム的にこの状況を処理する方法がありますか? – user123959

+0

起動時にアプリケーションがデータベースに接続できない場合でも、アプリケーションは期待どおりに起動します。その後、チェックを処理することができ、2番目のチェックが失敗した場合は、最初のチェックに変更することができます。また、必要に応じてブート時にこれを回避しようとすると、JDBC接続プールを手動で変更することもできます。この例を確認してください(https://stackoverflow.com/a/23507135/4835819)あなたのケースでは、この種のエラーメッセージをスキップするためにプライマリDBをより信頼性の高いサーバに指定することを選択します。 –

関連する問題