# multidatasource-spring-starter
**Repository Path**: bigNoseCat/multidatasource-spring-starter
## Basic Information
- **Project Name**: multidatasource-spring-starter
- **Description**: 多数据源动态切换,以及多数据源事务管理框架
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 7
- **Forks**: 3
- **Created**: 2021-08-03
- **Last Updated**: 2023-12-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: SpringBoot, 多数据源, 事务
## README
# 多数据源 spring-boot-starter
## 前言
这是什么?
> 在spring-boot 项目中 本框架可以帮你快捷的使用多个不同的数据源,同时保证了多个数据源之间的事物问题
,同时可以兼容不同的 dataSource,比如 druid,也可以兼容各种 ORM 框架,比如 mybatis , JPA
为什么造这个轮子? ***~~因为我太闲了~~***
## 快速体验
> 下面试例 是 mysql+druid+mybatis 的形式
### 运行环境
需要 spring boot 2.0 以上的版本
### 引用坐标
使用maven中央仓库中的坐标
```xml
io.github.cao2068959
multidatasource-spring-starter
1.1.2
```
或者`clone`本仓库后执行以下命令来安装
```shell
mvn clean install
```
### 配置文件
在引入项目坐标后,在 `application.yml` 文件中配置对应需要连接的源
```yaml
chy:
multi:
data-source:
#定义了一个数据源叫做 userdb
userdb:
driver-class-name: com.mysql.cj.jdbc.Driver
password: mysql密码
username: mysql账号
url: jdbc:mysql://192.168.10.10:3306/db_user?characterEncoding=utf8
#指定了数据源类型使用 druid
type: "com.alibaba.druid.pool.DruidDataSource"
#下面都是 druid 的官方配置
pool:
initialSize: 3
minIdle: 5
maxActive: 20
maxWait: 30000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: "SELECT 1 FROM DUAL"
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
#定义了一个数据源叫做 storedb
storedb:
driver-class-name: com.mysql.cj.jdbc.Driver
password: mysql密码
username: mysql账号
url: jdbc:mysql://192.168.10.10:3306/db_store?characterEncoding=utf8
#如果使用了 mybatis作为 orm框架可以配置以下特殊处理
mybatis:
#开启 mybatis 的自动配置, 这里将会自动配置 SqlSessionFactory 对象, 如果使用了 其他的mybatis自动配置插件(如:mybatis-plus)请关闭
autoconf: true
```
上述 配置文件中 可以看出 ,配置了2个数据源 一个是 `userdb` 使用了 `druid` 作为数据源,一个 叫做 `storedb`
使用了 默认的 `Tomcat` 数据源,同样你也换成速度更快的 `HikariCP`, 配置同 `spring-boot` 默认的 `dataSource`
### 编写DAO 接口
为了方便 使用了 `mybatis` 的注解形式, 如果使用的是 `xml` 的形式也是一样的
在对应的调用接口上打上注解 `@DataSource("storedb")` 来指定对应的dao 接口使用的是什么数据源
如果接口上没有标注 `@DataSource` 则默认使用第一个数据源
```java
@Select("select * from employee")
@DataSource("storedb")
public List