首页  

MyBatis Plus 动态数据源注解 @DS 注解     所属分类 mybatis-plus 浏览量 22
在多个数据库之间动态切换的场景(如读写分离、多租户等)



<!-- MyBatis Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

<!-- 动态数据源(MyBatis Plus 提供) -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>




spring:
  datasource:
    dynamic:
      primary: master  # 默认数据源
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/master_db?useSSL=false&serverTimezone=UTC
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave1:
          url: jdbc:mysql://localhost:3306/slave1_db?useSSL=false&serverTimezone=UTC
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave2:
          url: jdbc:mysql://localhost:3306/slave2_db?useSSL=false&serverTimezone=UTC
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver


import com.baomidou.dynamic.datasource.DynamicDataSource;
import com.baomidou.dynamic.datasource.provider.AbstractDataSourceProvider;
import com.baomidou.dynamic.datasource.spring.boot3.DataSourceProperty;
import com.baomidou.dynamic.datasource.spring.boot3.YamlDynamicDataSourceFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Map;

@Configuration
public class DynamicDataSourceConfig {

    @Bean
    public DynamicDataSource dynamicDataSource(YamlDynamicDataSourceFactory factory) {
        Map< String, DataSourceProperty> dataSourceMap = factory.createDataSourceMap();
        return new DynamicDataSource(dataSourceMap);
    }
}


在 Service 层或 Mapper 层使用 @DS 注解指定数据源


import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @DS("master") // 使用 master 数据源
    public void saveUser(User user) {
        // 保存到 master 数据库
    }

    @DS("slave1") // 使用 slave1 数据源
    public User getUserById(Long id) {
        // 从 slave1 数据库查询
        return null;
    }
}



读写分离配置(可选)

spring:
  datasource:
    dynamic:
      write-strategy: round_robin # 写操作策略(默认为 master)
      read-strategy: round_robin   # 读操作策略(轮询)

注意事项
@DS 注解优先级:
方法上的注解 > 类上的注解 > 全局默认数据源(primary)  
事务管理:
如果需要跨数据源事务,需使用 @Transactional 并配置分布式事务(如 Seata)  
数据源名称:
确保 @DS("xxx") 中的名称与 application.yml 中配置的名称一致

上一篇     下一篇
springboot自定义日志注解

词向量 Word Embedding

spring事务的一些知识点

MyBatis Plus @DS注解原理

多个AOP切面注解 执行顺序说明