Springboot+mybatis-plus+druid多数据源

一、简介

     网上看了很多Mybatis的多数据源配置,使用aop或者编写配置类自定义数据源等等,感觉蛮复杂的,后面发现mybatis-plus配置多数据源方式很简单,就一个配置文件加@DS注解搞定,简单又好维护

      mybatis-plus作为mybatis的增强版,在维持Mybatis自带功能基础上扩展了新的功能,主要包括:

  • 提供CRUD方法:封装了一些通用的增删改查方法,包括批量操作,可以直接使用提供的接口调用
  • 代码生成器:比mybatis的好用
  • 条件构造器:通过EntityWrapper<T>可自行构造sql条件,可以理解为将sql语句转换为java代码

二、使用

  1. pom文件加入依赖
    <dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid-spring-boot-starter</artifactId>
    			<version>1.1.20</version>
    </dependency>
    
    <dependency>
    			<groupId>com.baomidou</groupId>
    			<artifactId>mybatis-plus-boot-starter</artifactId>
    			<version>3.3.2</version>
    </dependency>
    
    <dependency>
    			<groupId>com.baomidou</groupId>
    			<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    			<version>3.2.1</version>
    </dependency>

     

  2. applicaton文件进行配置

    mybatis-plus:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.example.demo.entity
      gloabl_config:
        db-config:
          #AUTO数据库ID自增,NONE若有手动设置主键值,则使用手动设置的值,如果没有,则使用雪花算法生成,INPUT insert前自行set主键值
          #ASSIGN_ID雪花算法分配ID,主键类型为Number或String,ASSIGN_UUID分配UUID,主键类型为String
          id-type: ASSIGN_UUID
          #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
          field-strategy: NOT_NULL
          #逻辑删除值
          logic-delete-value: -1
          logic-not-delete-value: 0
        #原生配置
        configuration:
          #数据库字段下划线转换为驼峰命名
          map-underscore-to-camel-case: true
          #是否开启缓存
          cache-enabled: false
          #字段为null也返回
          call-setters-on-nulls: true
          #传入Null值时设置转换类为空
          jdbc-type-for-null: 'null'
    spring:
      datasource:
        druid:
          validation-query: SELECT 1 FROM DUAL
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          stat-view-servlet:
            enabled: true
            url-pattern: /druid/*
            reset-enable: false
            login-username: admin
            login-password: admin
          filter:
            stat:
              enabled: true
              log-slow-sql: true
              slow-sql-millis: 1000
              merge-sql: false
            wall:
              enabled: true
              config:
                multi-statement-allow: true
          web-stat-filter:
            enabled: true
            url-pattern: /*
            exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
            profile-enable: true
            session-stat-enable: true
            session-stat-max-count: 200
            principal-cookie-name: USER_COOKIE
            principal-session-name: USER_SESSION
          aop-patterns: com.example.demo.service.*  # 如果有循环依赖导致报错,则需去掉此项配置,并启用DruidConfig
        dynamic:
          primary: master
          datasource:
            master:
              url: jdbc:oracle:thin:@xxxxxxx:Desendb
              username: xxxxx
              password: xxxxx
              driver-class-name: oracle.jdbc.OracleDriver
              type: com.alibaba.druid.pool.DruidDataSource
            slave_1:
              url: jdbc:oracle:thin:@xxxxxxx:Desendb
              username: xxxxx
              password: xxxxx
              driver-class-name: oracle.jdbc.OracleDriver
              type: com.alibaba.druid.pool.DruidDataSource

    上面贴出了一些常见的配置(连接数据库的信息已注释,自行配置),具体详情参考官网文档。这里配置多数据源时遇到了点小问题,mybatis-plus官方给的文档没有集成druid,导致运行一直报错,后来反复调整配置最终出来了这一版可用,druid和dynamic是同一级,并且下面的子项缩进也要注意,一不小心就遇坑。

  3. springboot启动类配置

    @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }

    这里加上 exclude = DruidDataSourceAutoConfigure.class 是因为DruidDataSourceAutoConfigure会默认帮我们配置单数据源,但是项目中现在用的又是多数据源起冲突了,所以加上这个配置就排除了druid数据源的自动配置

  4. 使用

    @Service
    @DS("master")
    public class TaskLogServiceImpl extends ServiceImpl<TaskLogDao, TaskLog> implements TaskLogService {
    
        @Override
        public Pagination<TaskLog> queryPage(Map<String, Object> params) {
            IPage<TaskLog> page = this.page(new PageBuilder<TaskLog>(params).build(), new QueryWrapper<>());
            return new Pagination<>(page);
        }
    
        @Override
        public List<TaskLog> getAll() {
            return this.baseMapper.getAll();
        }
    }

    使用@DS注解进行切换,括号里的值为在配置文件自定义的数据源名称,该注解可用用在类上或方法上,方法的优先级大于类,官方推荐加在service的实现类上,避免混乱

  5. 测试

        如果配置成功,启动时日志会输出相应的数据源信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值