一、需求背景

项目中需要接入多个数据库,并使用MybatisPlus进行增删改查操作。

二、解决方案

dynamic-datasource-spring-boot-starter 是一个基于Spring Boot的开源库,用于简化在Spring Boot应用中实现多数据源的支持。这个库提供了自动配置和动态数据源切换的功能,使得开发者可以更方便地进行多数据库的管理与操作。

使用dynamic-datasource-spring-boot-starter实现动态数据源的基本步骤如下:

1、添加依赖: 在你的pom.xml或者build.gradle文件中添加依赖。

<dependencies>  
    <!-- dynamic-datasource-spring-boot-starter -->  
    <dependency>  
        <groupId>com.baomidou</groupId>  
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>  
        <version>3.4.1</version>  
    </dependency>  
    <!-- mybatis-plus-boot-starter -->  
    <dependency>  
        <groupId>com.baomidou</groupId>  
        <artifactId>mybatis-plus-boot-starter</artifactId>  
        <version>最新版本</version>  
    </dependency>  
    <!-- 其他依赖 -->  
</dependencies>

2、配置数据源: 在application.yml或application.properties中配置多个数据源的信息。

spring:  
  datasource:  
    dynamic:  
      primary: master # 设置默认的数据源或者数据源组,默认值即为master  
      datasource:  
        master:  
          url: jdbc:mysql://localhost:3306/master_db?useSSL=false&serverTimezone=UTC  
          username: root  
          password: 123456  
          driver-class-name: com.mysql.cj.jdbc.Driver  
        slave:  
          url: jdbc:mysql://localhost:3306/slave_db?useSSL=false&serverTimezone=UTC  
          username: root  
          password: 123456  
          driver-class-name: com.mysql.cj.jdbc.Driver

3、使用注解或 AOP 进行数据源切换
可以使用 @DS 注解在方法或类级别上指定要使用的数据源,或者在 AOP 切面中根据某些条件动态切换数据源。

  • 使用@DS注解,可以切换数据源。如果没有配置@DS,则使用默认数据源(使用配置文件中的primary源)。
  • @DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
  • 注解在service实现或mapper接口方法上,但强烈不建议同时在service和mapper注解。
@Service  
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {  
  
    @Override  
    @DS("slave") // 指定使用 slave 数据源  
    public List<User> selectAll() {  
        return baseMapper.selectList(null);  
    }  
}

或者,使用 AOP 进行更复杂的切换逻辑。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐