springboot集成mybatis plus和dynamic-datasource注意事项说明

2022-07-19,,,,

目录
  • springboot集成mybatis plus和dynamic-datasource注意事项
    • 环境
    • 注意事项
  • springboot mybatis plus多数据源配置整合dynamic-datasource
    • pro文件引入依赖
    • application.yml配置
    • 修改application启动类
    • 创建mybatisplusconfig
    • 创建mapper接口
    • 测试类测试

springboot集成mybatis plus和dynamic-datasource注意事项

环境

  • spring-boot-starter-parent 1.5.2.release
  • mybatis-plus-boot-starter 2.x
  • dynamic-datasource-spring-boot-starter 2.5.0
  • druid-spring-boot-starter 1.1.10

注意事项

@springbootapplication(exclude = druiddatasourceautoconfigure.class)

dynamic所有版本默认启用stat和wall过滤器(默认不支持批量执行sql, 并且有些低版本无法自定义)

开启批量执行sql的方法

# 方法1:升级版本, 如2.5.0
spring:
  datasource:
    dynamic:
      druid: 
        wall:
          nonebasestatementallow: true
          multistatementallow: true
# 方法2:移除wall过滤器
spring:
  datasource:
    dynamic:
      druid: 
        filters: stat

现有项目集成mybatis plus时,应指定另外的枚举包,否则会出问题

mybatis-plus:
  type-enums-package: com.zxkj.demo.enums.mp

springboot mybatis plus多数据源配置整合dynamic-datasource

pro文件引入依赖

       <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>druid-spring-boot-starter</artifactid>
            <version>1.2.6</version>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupid>com.baomidou</groupid>
            <artifactid>mybatis-plus-boot-starter</artifactid>
            <version>3.1.2</version>
        </dependency>
        <!--主从配置依赖-->
        <dependency>
            <groupid>com.baomidou</groupid>
            <artifactid>dynamic-datasource-spring-boot-starter</artifactid>
            <version>2.5.6</version>
        </dependency>
        <!--lombok用来简化实体类:需要安装lombok插件-->
        <dependency>
            <groupid>org.projectlombok</groupid>
            <artifactid>lombok</artifactid>
            <version>1.18.20</version>
        </dependency>

application.yml配置

spring:
  datasource:
    dynamic:
      primary: master #设置默认数据源或数据源组,master默认值(数据源名称可以随意起名,没有固定值,eg:db1,db2)
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        master:
          driver-class-name: com.mysql.cj.jdbc.driver
          url: jdbc:mysql://192.168.3.220:3306/mchouse_test1?useunicode=true&characterencoding=utf-8
          username: *****
          password: *****
        slave_1:
          driver-class-name: com.mysql.cj.jdbc.driver
          url: jdbc:mysql://112.30.184.149:3306/net_trans_sup_hefei_edi?useunicode=true&characterencoding=utf-8&servertimezone=asia/shanghai
          username: *****
          password: *****
        slave_2:
          driver-class-name: com.mysql.cj.jdbc.driver
          url: jdbc:mysql://120.55.168.100:33066/net_trans_sup_hefei_edi?useunicode=true&characterencoding=utf-8&servertimezone=asia/shanghai
          username: *****
          password: *****
mybatis-plus:
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.stdoutimpl #org.apache.ibatis.logging.slf4j.slf4jimpl
  mapper-locations: classpath:mapper/*.xml #配置mybatis.xml文件路劲 classpath根路径
  global-config:
    # 逻辑删除配置
    db-config:
      # 删除后
      logic-delete-value: 1
      # 删除前
      logic-not-delete-value: 0

修改application启动类

@springbootapplication(exclude = {druiddatasourceautoconfigure.class})

这里要排除druiddatasourceautoconfigure ,因为druiddatasourceautoconfigure会注入一个datasourcewrapper,其会在原生的spring.datasource下找url,username,password等。而我们动态数据源的配置路径是变化的。

创建mybatisplusconfig

@configuration
@enabletransactionmanagement
@mapperscan("com.example.md5_demo.com.db.**.mapper")
public class mybatisplusconfig {
    /**
     * sql 执行性能分析插件
     * 开发环境使用,线上不推荐。 maxtime 指的是 sql 最大执行时长
     */
    @bean
    @profile({"dev","test"})// 设置 dev test 环境开启
    public performanceinterceptor performanceinterceptor() {
        performanceinterceptor performanceinterceptor = new performanceinterceptor();
        performanceinterceptor.setmaxtime(100000);//ms,超过此处设置的ms则sql不执行
        performanceinterceptor.setformat(true);
        return performanceinterceptor;
    }
    /**
     * 逻辑删除插件
     */
    @bean
    public isqlinjector sqlinjector() {
        return new logicsqlinjector();
    }
    /**
     * 分页插件
     */
    @bean
    public paginationinterceptor paginationinterceptor() {
        return new paginationinterceptor();
    }
}

创建mapper接口

@mapper
public interface demomapper extends basemapper<demo> {
    list<demo> getalllist();
    @ds("slave_2")
    list<demo> getshoplist();
}

测试类测试

@springboottest
class md5demoapplicationtests {
    @autowired
    private demomapper demomapper;
    @test
    void contextloads() {
        list<demo> list=demomapper.getalllist();
        system.out.println(list);
        system.out.println("***************");
        list<demo> shoplist=demomapper.getshoplist();
        system.out.println(shoplist);
    }
}

@ds优先级:方法 > 类

@ds 可以注解在方法上和类上,同时存在方法注解优先于类上注解,mapper或者service都可以添加,建议只在一个方法上添加即可。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

《springboot集成mybatis plus和dynamic-datasource注意事项说明.doc》

下载本文的Word格式文档,以方便收藏与打印。