头像

MYBATIS-PLUS 多数据源-读写分离

前言

最近翻了下mybatis-plus官方文档,发现多数据源这一块,提供了读写分离的功能。之前系统使用的sharding sphere插件实现读写分离(没有使用分库分表,业务上不去),总结有以下缺陷:
1、单纯使用读写分离,也受到SQL不支持项的约束
2、项目启动时,加载meta数据时间比较长(200+的表,本地开发加载12000+ms,测试环境4000+ms)
3、打印的sql执行日志,换行比较多,也不像mybatis打印的SQL那么容易还原(或者直接通过插件还原)
既然mybatis-plus提供了读写分离功能,系统中本来也集成了mybatis-plus,于是决定改用mybatis-plus提供读写分离。

PS:自己也找过很多方式尝试,失败了!!!

过程

官网地址

mbatis-plus
mybatis-plus 多数据源

过程

按照官网指引

引入DYNAMIC-DATASOURCE-SPRING-BOOT-STARTER

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>

配置数据源,使用HIKARI连接池

spring:
  datasource:    
    dynamic:
      p6spy: false
      hikari:
        connection-test-query: SELECT 1
        minimum-idle: 60
        idle-timeout: 30000
        maximum-pool-size: 500
        auto-commit: true
        max-lifetime: 120000
        connection-timeout: 30000
      primary: master
      strict: false
      datasource:
        master:
          url: jdbc:mysql://xxx:3306/xxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
          username: xxx
          password: xxxx
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.zaxxer.hikari.HikariDataSource
          hikari:
            pool-name: masterHikariPool
        slave_1:
          url: jdbc:mysql://xxxx:3308/xxxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
          username: xxx
          password: xxxx
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.zaxxer.hikari.HikariDataSource
          hikari:
            pool-name: slave1HikariPool

注意,在官网的示例里,默认是使用druid连接池,要修改为hikari,必须指定type:com.zaxxer.hikari.HikariDataSource,不然都是使用druid,而且该starter使用的druid版本,还是会有localDateTime转换出错的问题

使用读写分离模式

    @Bean
    public MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin(){
        return new MasterSlaveAutoRoutingPlugin();
    }

开启日志打印

logging:
  level:
  	com.baomidou.dynamic: debug

注意,这个是全局配置,可以不用@DS注解在每个类上,当然也可以注解,注解了@DS,则按照@DS注解进行

 

网址来源:https://www.freesion.com/article/65781031315/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>