Perbarui 2018-01-07 dengan Spring Boot 1.5.8.RELEASE
Sebagian besar jawaban tidak menyediakan cara menggunakannya (sebagai sumber data itu sendiri dan sebagai transaksi), hanya bagaimana mengonfigurasinya.
Anda dapat melihat contoh runnable dan beberapa penjelasan di https://www.surasint.com/spring-boot-with-multiple-databases-example/
Saya menyalin beberapa kode di sini.
Pertama, Anda harus mengatur properti application.prop seperti ini
#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
Kemudian definisikan mereka sebagai penyedia (@Bean) seperti ini:
@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();
}
Perhatikan bahwa saya memiliki @Bean (nama = "dataource1") dan @Bean (nama = "dataource2"), maka Anda dapat menggunakannya ketika kita membutuhkan sumber data sebagai @Qualifier ("dataource1") dan @Qualifier ("dataource2"), sebagai contoh
@Qualifier("datasource1")
@Autowired
private DataSource dataSource;
Jika Anda peduli dengan transaksi, Anda harus mendefinisikan DataSourceTransactionManager untuk keduanya, seperti ini:
@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;
}
Maka Anda bisa menggunakannya seperti
@Transactional //this will use the first datasource because it is @primary
atau
@Transactional("tm2")
Ini sudah cukup. Lihat contoh dan detail di tautan di atas.