Обновление 2018-01-07 с Spring Boot 1.5.8. ВЫПУСК
Большинство ответов не предоставляют, как их использовать (как сам источник данных и как транзакция), только как их настроить.
Вы можете увидеть работающий пример и некоторые пояснения в 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")
Этого должно быть достаточно. Смотрите пример и подробности в ссылке выше.