1. 添加依赖 (pom.xml)
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- 动态数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.6.1</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 配置文件 (application.yml)
spring:
datasource:
dynamic:
primary: primary # 设置默认数据源
strict: false # 不使用严格模式
datasource:
primary:
url: jdbc:mysql://localhost:3306/primary_db?useSSL=false&serverTimezone=UTC
username: root
password: root123
driver-class-name: com.mysql.cj.jdbc.Driver
secondary:
url: jdbc:sqlserver://127.0.0.1:1433;databaseName=LOG_DATA
username: sa
password: sa@123
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# MyBatis-Plus配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 开启驼峰命名转换
global-config:
db-config:
id-type: auto # 主键自增
mapper-locations: classpath:mapper/*.xml
这里配置好数据源,我这里配置了两个数据源,一个是MySQL,一个是SQL Service,然后我设置了primary为默认数据源。
3. 数据源配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
/**
* Author:Jayden Lee
* 日期:2025/7/2 15:16
* 文件描述:MybatisPlus配置
**/
@Configuration
@MapperScan("com.kfc.oatosrm.mapper")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER));
return interceptor;
}
}
注意:因为我是配置了两个不同数据库类型的数据源,所以此处MyBatis-Plus分页插件我配置了两种数据库。
4、启动类中需要把DataSourceAutoConfiguration.class排除
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class OaToSrmApplication {
public static void main(String[] args) {
SpringApplication.run(OaToSrmApplication.class, args);
}
}
5、在service和mapper实现类上使用@DS注解,注明数据源
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.energy.oatosrm.entity.Organization;
import com.energy.oatosrm.mapper.OrganizationMapper;
import com.energy.oatosrm.service.OrganizationService;
import org.springframework.stereotype.Service;
/**
* @Author Jayden Lee
* @Date 2025/7/2 13:49
* 文件描述:
*/
@Service
public class OrganizationServiceImpl extends ServiceImpl<OrganizationMapper, Organization> implements OrganizationService {
@DS("primary")
@Override
public String getOrgNumberByName(String orgName) {
QueryWrapper<Organization>queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(Organization::getOrgName,orgName);
return this.getOne(queryWrapper).getOrgNumber();
}
}
此处我将@DS注解用在了Service方法上。其中在类上使用表示整个实现类的数据源指向同一个,在方法上使用代表这个方法的数据源被指定。
总结
通过上述配置,我们即可在SpringBoot应用中轻松实现MyBatis-Plus的多数据源管理。关键点包括:
使用
dynamic-datasource-spring-boot-starter
简化配置通过自定义
@DS
注解实现数据源切换为不同数据源的操作提供清晰的服务层接口
合理处理跨数据源事务
这种方式支持灵活的数据源扩展,可以轻松添加更多数据源,只需在配置文件中添加新数据源定义,并在代码中使用@DS("newDataSource")
即可。