# dynamic-datasource-spring-boot-starter
**Repository Path**: gwolf_2017/dynamic-datasource-spring-boot-starter
## Basic Information
- **Project Name**: dynamic-datasource-spring-boot-starter
- **Description**: dynamic-datasource-spring-boot-starter是基于springboot开发的一
款多数据源动态切换的开发工具,只需在springboot项目中导入依赖
即可方便快捷的开发多数据源项目,并且支持多数据源的分布式事务。
为您的多数据源项目开发保驾护航。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/wdyun/dynamic-datasource-spring-boot-starter
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2022-06-02
- **Last Updated**: 2022-06-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Dynamic Datasource
🍑 A springboot tool that provides dynamic data sources
👉 https://gitee.com/wdyun 👈
-------------------------------------------------------------------------------
[**🌎English Documentation**](README.en.md)
-------------------------------------------------------------------------------
## 📚简介
dynamic-datasource-spring-boot-starter是基于springboot开发的一款多数据源动态切换的开发工具。
只需在springboot项目中导入依赖 即可方便快捷的开发多数据源项目,并且支持多数据源的分布式事务。
为您的多数据源项目开发保驾护航。
### 🍺目的
专门为springboot项目提供动态数据源支持的开源java项目
旨在提供多数据源的一键式支持。。
### 🐮特性
- 多数据源配置简单,只需在配置文件中配置附加数据源即可。
- 支持多种数据库类型(mysql,postgresql,oracle)。
- 支持使用注解动态切换数据源
- 支持从 Mapper接口层切换多数据源,方便快捷,彻底的解决必须从 Controller 里切换数据源的麻烦。
- 提供mybatis环境下的纯读写分离方案。
- 提供基于jta atomikos的分布式事务。
- 支持分布式事务与普通事务的配置切换。
- 普通事务支持多种数据源(druid,c3po,dbcp)。
## 📦安装
### 🍊Maven
在项目的pom.xml的dependencies中加入以下内容:
```xml
com.enbatis
dynamic-datasource-spring-boot-starter
1.4.0
```
在yml文件里面添加多数据源的配置
```yml
spring:
datasource:
dynamic:
name: master,slave
default: master
master:
type: com.alibaba.druid.pool.xa.DruidXADataSource
driverClassName: 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
driverClassName: 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接口添加数据源的配置
```java
@MybatisMapper(name = "master")
public interface SysUserMapper extends BaseMapper {
List list1();
}
@MybatisMapper(name = "slave")
public interface SysUserMapper2 extends BaseMapper {
}
```
使用分布式事务示例如下(只需在需要事务的方法上加入DynamicTx注解)
```java
@Service
public class SysUserServiceImpl extends BaseServiceImpl 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](https://gitee.com/wdyun/hrm)
```mysql
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;
```
-------------------------------------------------------------------------------