Atualização 2018-01-07 com Spring Boot 1.5.8.
A maioria das respostas não fornece como usá-las (como fonte de dados em si e como transação), apenas como configurá-las.
Você pode ver o exemplo executável e algumas explicações em https://www.surasint.com/spring-boot-with-multiple-databases-example/
Copiei algum código aqui.
Primeiro você deve definir application.properties como este
#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
Em seguida, defina-os como provedores (@Bean) como este:
@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();
}
Observe que eu tenho @Bean (name = "datasource1") e @Bean (name = "datasource2"), então você pode usá-lo quando precisarmos da fonte de dados como @Qualifier ("datasource1") e @Qualifier ("datasource2"), por exemplo
@Qualifier("datasource1")
@Autowired
private DataSource dataSource;
Se você se importa com a transação, precisa definir o DataSourceTransactionManager para os dois, assim:
@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;
}
Então você pode usá-lo como
@Transactional //this will use the first datasource because it is @primary
ou
@Transactional("tm2")
Isso deve ser suficiente. Veja exemplo e detalhes no link acima.