Spring Boot 1.5.8.RELEASEで2018-01-07を更新
ほとんどの回答では、それらの使用方法(データソース自体およびトランザクションとして)は提供されておらず、構成方法のみが提供されています。
実行可能なサンプルといくつかの説明はhttps://www.surasint.com/spring-boot-with-multiple-databases-example/で見ることができます
ここにコードをコピーしました。
まず、application.propertiesを次のように設定する必要があります
#Database
database1.datasource.url=jdbc:mysql://localhost/testdb
database1.datasource.username=root
database1.datasource.password=root
database1.datasource.driver-class-name=com.mysql.jdbc.Driver
database2.datasource.url=jdbc:mysql://localhost/testdb2
database2.datasource.username=root
database2.datasource.password=root
database2.datasource.driver-class-name=com.mysql.jdbc.Driver
次に、それらをプロバイダー(@Bean)として次のように定義します。
@Bean(name = "datasource1")
@ConfigurationProperties("database1.datasource")
@Primary
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "datasource2")
@ConfigurationProperties("database2.datasource")
public DataSource dataSource2(){
return DataSourceBuilder.create().build();
}
@Bean(name = "datasource1")と@Bean(name = "datasource2")があることに注意してください。@ Qualifier( "datasource1")と@Qualifier( "datasource2")としてデータソースが必要な場合に使用できます。例えば
@Qualifier("datasource1")
@Autowired
private DataSource dataSource;
トランザクションを気にする場合は、次のように、両方にDataSourceTransactionManagerを定義する必要があります。
@Bean(name="tm1")
@Autowired
@Primary
DataSourceTransactionManager tm1(@Qualifier ("datasource1") DataSource datasource) {
DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
return txm;
}
@Bean(name="tm2")
@Autowired
DataSourceTransactionManager tm2(@Qualifier ("datasource2") DataSource datasource) {
DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
return txm;
}
次に、あなたはそれを次のように使うことができます
@Transactional //this will use the first datasource because it is @primary
または
@Transactional("tm2")
これで十分でしょう。上記のリンクの例と詳細を参照してください。