使用Spring Boot 1.5.8更新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")
这应该足够了。请参阅上面的链接中的示例和详细信息。