Cập nhật 2018-01-07 với Spring Boot 1.5.8.RELEASE
Hầu hết các câu trả lời không cung cấp cách sử dụng chúng (như chính nguồn dữ liệu và giao dịch), chỉ có cách định cấu hình chúng.
Bạn có thể xem ví dụ có thể chạy được và một số lời giải thích trong https://www.surasint.com/spring-boot-with-multipl-database-example/
Tôi đã sao chép một số mã ở đây.
Trước tiên, bạn phải thiết lập application.properations như thế này
#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
Sau đó, xác định họ là nhà cung cấp (@Bean) như thế này:
@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();
}
Lưu ý rằng tôi có @Bean (name = "dataource1") và @Bean (name = "dataource2"), sau đó bạn có thể sử dụng nó khi chúng tôi cần nguồn dữ liệu như @Qualifier ("dataource1") và @Qualifier ("dataource2"), ví dụ
@Qualifier("datasource1")
@Autowired
private DataSource dataSource;
Nếu bạn quan tâm đến giao dịch, bạn phải xác định DataSourceTransactionManager cho cả hai, như thế này:
@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;
}
Sau đó, bạn có thể sử dụng nó như
@Transactional //this will use the first datasource because it is @primary
hoặc là
@Transactional("tm2")
Điều này là đủ. Xem ví dụ và chi tiết trong liên kết ở trên.