问题引述: 通常我们都在application.properties(或yml)中定义单数据源。但由于一些业务需求或系统功能需求,我们需要配置多个数据源,SpringBoot怎么配置多个数据源。
通常我们在配置单数据源时,我们只要如下配置:
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = [driverClassName]
然后我们不需要处理任何事务,所有的CRUD操作都是针对这个数据源而言的。
那么我们要怎么样配置两个数据源呢并使用他们呢?
首先,在springboot的application;properties配置文件中配置两个数据源:
#first db
spring.datasource.url = [url1]
spring.datasource.username = [username1]
spring.datasource.password = [password1]
spring.datasource.driverClassName = [driverClassName1]
#second db ...
spring.secondDatasource.url = [url2]
spring.secondDatasource.username = [username2]
spring.secondDatasource.password = [password2]
spring.secondDatasource.driverClassName = [driverClassName2]
这时候,我们就不能那么让springboot自动帮我们配置数据源了。
我们进行如下配置显示配置数据源:
@Component
public class DataSourceConfig{
@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="spring.secondDatasource")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
这样,我们就能够得到两个数据源了,其中第一个primaryDataSource是主要的数据源。如果不指定,那么SpringBoot也是使用它作为CRUD的数据源。
接下来,针对不同的CRUD,可能需要不同的数据源,所以数据源的一些上层配置,包括entityManagerFactory,TranscationManagerFactory等等都需要进行重新定制数据源配置。关于这一方面的内容,读者可以参考
这篇文章中的内容。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。