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

 更新时间:2022年01月07日 14:41:16   作者:_翚_  
这篇文章主要介绍了springboot集成mybatis plus和dynamic-datasource注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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都可以添加,建议只在一个方法上添加即可。

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

相关文章

  • JAVA 创建线程池的注意事项

    JAVA 创建线程池的注意事项

    这篇文章主要介绍了JAVA 创建线程池的注意事项,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java解析http协议字符串的方法实现

    Java解析http协议字符串的方法实现

    本文主要介绍了Java解析http协议字符串的方法实现,我们探讨了如何使用Java解析HTTP协议字符串,并将其封装成了一个HttpRequest类,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java虚拟机处理异常的最佳方式

    Java虚拟机处理异常的最佳方式

    这篇文章主要给大家介绍了关于Java虚拟机处理异常的最佳方式,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • IDEA实现Maven项目创建并连接Tomcat方式

    IDEA实现Maven项目创建并连接Tomcat方式

    Maven是一款由Apache开发的项目管理工具,主要用于Java项目的构建和依赖管理,它通过pom.xml文件自动管理项目依赖的jar包,简化了项目构建过程,Maven支持项目从编写源代码到编译、测试、打包、部署的全过程管理,其依赖管理功能免去了手动添加jar包的麻烦
    2024-10-10
  • SpringBoot开发技巧之如何处理跨域请求CORS

    SpringBoot开发技巧之如何处理跨域请求CORS

    CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制
    2021-10-10
  • SpringMVC @RequestMapping注解详解

    SpringMVC @RequestMapping注解详解

    本文主要介绍了SpringMVC @RequestMapping注解详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Spring Boot接口设计防篡改、防重放攻击详解

    Spring Boot接口设计防篡改、防重放攻击详解

    这篇文章主要给大家介绍了关于Spring Boot接口设计防篡改、防重放攻击的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • springboot接收JSON实现示例解析

    springboot接收JSON实现示例解析

    这篇文章主要为大家介绍了springboot如何接收JSON的实现示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Spring学习教程之AOP模块的概述

    Spring学习教程之AOP模块的概述

    AOP 从功能的角度来讲,可能看作OOP编程方式的一种补充,提供了一种不同的代码或者系统组织方式,下面这篇文章主要给大家介绍了关于Spring学习教程之AOP模块的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • 源码解读Mybatis占位符#和$的区别

    源码解读Mybatis占位符#和$的区别

    这篇文章主要介绍了Mybatis占位符#和$的区别通过源码解读,针对笔者日常开发中对 Mybatis 占位符 #{} 和 ${} 使用时机结合源码,思考总结而来,需要的朋友可以参考下
    2023-02-02

最新评论