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