我们在实际项目开发中,经常会遇到一个项目需要同时连接、访问多个数据库,进行业务处理。或者是随着项目运营,业务越来越复杂,原来的一个库也要进行业务拆分为多个库,这时也会面临同样的问题,一个项目连接、访问多个库。又或者主从分离、读写分离等等情况。那么本文就主要是以代码来呈现、讲解在SpringBoot项目中我们如何配置多数据源。
多数据库访问
一、数据库连接信息配置
在application.yml配置文件中,添加对应数据库连接信息,如下所示:
spring:
datasource:
master: # 这是第一个数据源名称,可自定义
url: jdbc:mysql://127.0.0.1:3306/master_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
slave: # 这是第二个数据源名称,可自定义
url: jdbc:mysql://127.0.0.1:3306/slave_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
这里目前定义了两个数据源,库一“master”和库二“slave”,如果有更多的数据源,则按照这个配置规则继续往下追加即可。其中,数据源名称是自定义的,只要不重名就可以。
二、数据源配置
在DataSourceConfig中设置这两个数据库的连接配置。具体代码如下:
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
/**
* 数据源配置
*/
@Configuration
public class DataSourceConfig {
//数据源配置 master数据源
@Primary
@Bean(name = "masterDataSourceProperties")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSourceProperties masterDataSourceProperties() {
return new DataSourceProperties();
}
//数据源 master数据源
@Primary
@Bean(name = "masterDataSource")
public DataSource masterDataSource(@Qualifier("masterDataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().build();
}
//数据源配置 slave数据源配置
@Bean(name = "slaveDataSourceProperties")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSourceProperties slaveDataSourceProperties() {
return new DataSourceProperties();
}
//数据源 slave数据源
@Bean("slaveDataSource")
public DataSource slaveDataSource(@Qualifier("slaveDataSourceProperties") DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().build();
}
}
三、JdbcTemplate多数据源配置
配置数据源连接工厂,具体代码如下:
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* JdbcTemplate多数据源配置
*/
@Configuration
public class JdbcTemplateDataSourceConfig {
//JdbcTemplate数据源 mater
@Primary
@Bean(name = "materJdbcTemplate")
public JdbcTemplate materJdbcTemplate(@Qualifier("materDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
//JdbcTemplate数据源 slave
@Bean(name = "slaveJdbcTemplate")
public JdbcTemplate slaveJdbcTemplate(@Qualifier("slaveDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
注:1、“@Primary”指的是在相同的bean中,优先使用该注解的bean。
2、“@Qualifier”指定某个bean有没有资格进行注入。
到此多数据源的配置工作已经完成。
四、应用
一般我们根据实际情况,在server层注入对应的dao就可以使用,如下代码所示:
/**
* Demo演示
*/
@Service
public class DemoServiceImpl implements DemoService {
@Autowired
@Qualifier("masterJdbcTemplate")
private JdbcTemplate masterJdbcTemplate;
@Autowired
@Qualifier("slaveJdbcTemplate")
private JdbcTemplate slaveJdbcTemplate;
/**
* 查询master库
*/
@Override
public void queryMaster() {
// TODO masterJdbcTemplate.queryForList()
}
/**
* 查询slave库
*/
@Override
public void querySlave() {
// TODO slaveJdbcTemplate.queryForList()
}
}
以上就是SpringBoot项目多数据源配置代码实现及简单应用示例。






