• dynamic-datasource-spring-boot-starter


    Dynamic Datasource

    🍑 A springboot tool that provides dynamic data sources

    👉 https://gitee.com/wdyun 👈

    👉 dynamic-datasource-spring-boot-starter 👈

    Maven Central

    -------------------------------------------------------------------------------

    🌎English Documentation


    📚简介

    dynamic-datasource-spring-boot-starter是基于springboot开发的一款多数据源动态切换的开发工具。

    只需在springboot项目中导入依赖 即可方便快捷的开发多数据源项目,并且支持多数据源的分布式事务。

    为您的多数据源项目开发保驾护航。

    🍺目的

    专门为springboot项目提供动态数据源支持的开源java项目
    旨在提供多数据源的一键式支持。

    🐮特性

    • 多数据源配置简单,只需在配置文件中配置附加数据源即可。
    • 支持多种数据库类型(mysql,postgresql,oracle)。
    • 支持使用注解动态切换数据源
    • 支持从 Mapper接口层切换多数据源,方便快捷,彻底的解决必须从 Controller 里切换数据源的麻烦。
    • 提供mybatis环境下的纯读写分离方案。
    • 提供基于jta atomikos的分布式事务。
    • 支持分布式事务与普通事务的配置切换。
    • 普通事务支持多种数据源(druid,c3po,dbcp)。

    📦安装

    🍊Maven

    在项目的pom.xml的dependencies中加入以下内容:

    <dependency>
      <groupId>com.enbatisgroupId>
      <artifactId>dynamic-datasource-spring-boot-starterartifactId>
      <version>${最新版本}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在yml文件里面添加多数据源的配置

    spring:
      datasource:
        dynamic:
          name: master,slave
          default: master
          master:
            type: com.alibaba.druid.pool.xa.DruidXADataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            username: xxx
            password: xxxxxxx
            url: jdbc:mysql://xxxxx:3306/test01?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
            initialSize: 5
            minIdle: 5
            maxActive: 20
          slave:
            type: com.alibaba.druid.pool.xa.DruidXADataSource
            driver-class-name: com.mysql.cj.jdbc.Driver
            username: xxx
            password: xxxxxxx
            url: jdbc:mysql://xxxxx:3306/test02?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
            initialSize: 5
            minIdle: 5
            maxActive: 20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在mapper接口添加数据源的配置(默认数据源可不添加)
    (master为默认的数据源)

    
    @MybatisMapper(name = "master") 
    public interface SysUserMapper extends BaseMapper<SysUser> {
        List<SysUser> list1();
    }
    
    @MybatisMapper(name = "slave")
    public interface SysUserMapper2 extends BaseMapper<SysUser> {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    使用分布式事务示例如下(只需在需要事务的方法上加入DynamicTx注解)

       
    @Service
    public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper,SysUser > implements SysUserService {
    
        @DynamicTx
        @Override
        public boolean tx() {
                SysUser sysUser = new SysUser();
                sysUser.setId(IdWorker.getId());
                sysUser.setSex("男");
                sysUser.setUsername("sysUserMapper1");
                baseMapper.addEntity(sysUser);
    
                System.out.println(10/0);
    
                SysUser sysUser2 = new SysUser();
                sysUser2.setId(IdWorker.getId());
                sysUser2.setSex("男");
                sysUser2.setUsername("sysUserMapper2");
                sysUserMapper2.addEntity(sysUser2);
                return false;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    🚽示例项目

    https://gitee.com/wdyun/hrm

    DROP TABLE IF EXISTS `sys_user`;
    CREATE TABLE `sys_user`  (
      `id` bigint(64) NOT NULL COMMENT '主键',
      `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户',
      `sex` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'sex',
      `deleted` int(2) NULL DEFAULT 0,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of sys_user
    -- ----------------------------
    INSERT INTO `sys_user` VALUES (1443577766556602368, 'test01', '男', 0);
    
    SET FOREIGN_KEY_CHECKS = 1;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

  • 相关阅读:
    亚信科技笔试题
    Idea汉化
    【C语言】操作符与优先级详解
    计算机视觉项目-实时目标追踪
    SpringBoot+MyBatisPlus+MySQL不能储存(保存)emoji表情问题解决
    【LeetCode题目详解】第九章 动态规划part06 完全背的讲解 518. 零钱兑换 II 377. 组合总和 Ⅳ (day44补)
    从 Elastic 的 Go APM 代理迁移到 OpenTelemetry Go SDK
    C++ 一些错误的解决方案汇编
    日历视图,轻松解决时间管理难题_三叠云
    【Java 基础篇】Java Supplier 接口详解
  • 原文地址:https://blog.csdn.net/wwd8979/article/details/126390764