dynamic-datasource-spring-boot-starter

动态-datasource-spring-boot-starter是一款简化多数据源配置的开源工具,支持Druid、C3PO等数据库,注解切换数据源,提供Mybatis读写分离和JTA Atomikos分布式事务。通过Maven轻松集成,快速构建高可用应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.enbatis</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${最新版本}</version>
</dependency>

在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

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


@MybatisMapper(name = "master") 
public interface SysUserMapper extends BaseMapper<SysUser> {
    List<SysUser> list1();
}

@MybatisMapper(name = "slave")
public interface SysUserMapper2 extends BaseMapper<SysUser> {

}

使用分布式事务示例如下(只需在需要事务的方法上加入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;
    }

}

🚽示例项目

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值