springboot集成mybatis plus和dynamic-datasource注意事项说明
程序员文章站
2022-03-02 22:39:08
目录springboot集成mybatis plus和dynamic-datasource注意事项环境注意事项springboot mybatis plus多数据源配置整合dynamic-dataso...
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都可以添加,建议只在一个方法上添加即可。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: sql对单个字段去重,显示所有列