1、简介

在实际开发中项目很容易就遇到使用多数据源的情形,比如:在新增数据时除了给自己的库保留一份,还需要同步到别人的库;转移程序需要将A库的数据转到B库等等。常见的使用Mybatis-Plus配置多数据源方式有两种:一种是通过java config的方式手动配置两个数据源,另一种方式便是使用mybatis-plus-dynamic。这里介绍下mybatis-plus-dynamic的使用。

2、实战

2.1 pom.xml引入依赖

		<!-- mybatis-plus配置不同数据源 需要引入的包 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>

2.2 application-dev.yml添加配置

application.yml中配置不同的yml,启动不同的服务环境比如dev,sit,pro等

server:
  port: 8086

spring:
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
  datasource:
    dynamic:
      primary: mysql1 #设置默认数据库源
      strict: false #严格匹配数据源,默认为false,true未匹配到指定数据库时抛异常,false使用默认数据源
      datasource:
        mysql1:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/demo1?serverTimezone=UTC
          username: root
          password: root1234
#          type: com.alibaba.druid.pool.DruidDataSource
        mysql2:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/demo2?serverTimezone=UTC
          username: root
          password: root1234
#          type: com.alibaba.druid.pool.DruidDataSource

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  #configuration:
    #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   #控制台打印sql开关
  mapper-locations:
    classpath: mapper/*.xml
    type-aliases-package: com.example.demo.entity
#showSql
logging:
  level:
    com:
      example:
        mapper : error

由于本机只安装了MySQL数据库,所以创建了两个不同名字的数据库用于模拟表示不同数据库场景。配置在dynamic下进行,其中primary必须配置,用于选择默认的数据源,这里mysql1是默认数据库。

2.3 使用

使用主要是通过@DS注解进行配置选择数据源,并且可以在类上进行配置。如果不使用@DS注解的类则使用primary配置的默认数据源。

@DS("mysql1")
@Repository("UserMapper")
public interface UserMapper extends BaseMapper<User> {
}
@DS("mysql2")
@Repository("User2Mapper")
public interface User2Mapper extends BaseMapper<User2> {
}

2.4 测试

@SpringBootTest
class DemoSpringMybatisplusApplicationTests {

    @Autowired
    UserMapper userMapper;
    @Autowired
    User2Mapper user2Mapper;

    @Test
    void test() {
        User user = userMapper.selectById(1);
        System.out.println("执行了数据源mysql1数据源:"+user.toString());
        User2 user2 = user2Mapper.selectById(1);
        System.out.println("执行了数据源mysql2数据源:"+user2.toString());
    }
}

2.5 测试结果

SpringBoot+Mybatis-Plus多数据源使用-LMLPHP

3、项目结构和代码

源码下载 demo-springboot-mybatisplus
SpringBoot+Mybatis-Plus多数据源使用-LMLPHP
参考资料
https://blog.csdn.net/jike11231/article/details/120722718
https://blog.csdn.net/weixin_44690195/article/details/108080078
https://blog.csdn.net/qq_38353700/article/details/118583828
https://blog.csdn.net/qq_38550836/article/details/103436898

10-04 13:29