背景介绍
在使用Spring Boot进行开发的过程中,我们通常会遇到多数据源的需求。比如,一个系统需要同时连接多个数据库进行读写操作,或者需要连接不同的数据库进行分库分表。本文将介绍如何使用Spring Boot整合Mybatis-Plus和Druid,实现多数据源的配置和使用。
步骤一:添加依赖
首先,我们需要在pom.xml
文件中添加以下依赖:
<dependencies>
...
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
...
</dependencies>
步骤二:配置数据源
在application.yml
中配置数据源信息:
spring:
datasource:
druid:
default:
url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
db2:
url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
步骤三:配置多数据源
在config
包下创建一个DataSourceConfig
类,配置多数据源:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.druid.default")
public DataSource dataSource1() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.druid.db2")
public DataSource dataSource2() {
return DruidDataSourceBuilder.create().build();
}
@Bean
public DataSourceRouting dataSourceRouting(@Qualifier("dataSource1") DataSource dataSource1,
@Qualifier("dataSource2") DataSource dataSource2) {
DataSourceRouting dataSourceRouting = new DataSourceRouting();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("dataSource1", dataSource1);
dataSourceMap.put("dataSource2", dataSource2);
dataSourceRouting.setTargetDataSources(dataSourceMap);
dataSourceRouting.setDefaultTargetDataSource(dataSource1);
return dataSourceRouting;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSourceRouting dataSourceRouting) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dataSourceRouting);
return factoryBean.getObject();
}
@Bean
public PlatformTransactionManager transactionManager(DataSourceRouting dataSourceRouting) {
return new DataSourceTransactionManager(dataSourceRouting);
}
}
步骤四:编写Mapper和Service
在使用Mybatis-Plus进行操作数据库时,需要编写Mapper和Service。这里以两个数据源为例,分别创建两个包com.example.mapper
和com.example.service
用于存放不同数据源的Mapper和Service接口。
在com.example.mapper
中创建Db1Mapper
和Db2Mapper
接口,并使用@Mapper
注解进行标记:
@Mapper
public interface Db1Mapper extends BaseMapper<Db1Entity> {
}
@Mapper
public interface Db2Mapper extends BaseMapper<Db2Entity> {
}
在com.example.service
中创建Db1Service
和Db2Service
接口:
public interface Db1Service extends IService<Db1Entity> {
}
public interface Db2Service extends IService<Db2Entity> {
}
步骤五:使用多数据源
在需要使用数据源的地方,通过注解的方式指定要使用的数据源。例如,在Service实现类中:
@Service
public class Db1ServiceImpl extends ServiceImpl<Db1Mapper, Db1Entity> implements Db1Service {
@Override
@DataSource("dataSource1")
public List<Db1Entity> getDb1Data() {
return baseMapper.selectList(null);
}
}
@Service
public class Db2ServiceImpl extends ServiceImpl<Db2Mapper, Db2Entity> implements Db2Service {
@Override
@DataSource("dataSource2")
public List<Db2Entity> getDb2Data() {
return baseMapper.selectList(null);
}
}
通过@DataSource
注解指定要使用的数据源名称,即@Bean(name = "dataSource1")
或@Bean(name = "dataSource2")
中定义的名称。
步骤六:测试多数据源
编写测试类进行多数据源的测试:
@SpringBootTest
class MultiDataSourceTest {
@Autowired
private Db1Service db1Service;
@Autowired
private Db2Service db2Service;
@Test
void testMultiDataSource() {
List<Db1Entity> db1Data = db1Service.getDb1Data();
List<Db2Entity> db2Data = db2Service.getDb2Data();
// 进行数据操作和断言
}
}
运行测试类,验证多数据源是否配置成功。
结语
本文介绍了如何使用Spring Boot整合Mybatis-Plus和Druid实现多数据源的配置和使用。通过配置不同的数据源,并使用注解的方式指定要使用的数据源,可以方便地实现多数据源的操作。希望该文章对你有所帮助!
本文来自极简博客,作者:星辰坠落,转载请注明原文链接:Spring Boot整合Mybatis-Plus Druid实现多数据源