Spring Boot + MyBatis-Plus 多数据源配置指南

发布于:2025-07-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

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")即可。