# dynamic-beetlsql-spring-boot-starter
**Repository Path**: yerongli367/dynamic-beetlsql-spring-boot-starter
## Basic Information
- **Project Name**: dynamic-beetlsql-spring-boot-starter
- **Description**: 基于spring boot, 整合 dynamic-datasource 和 beetlSQL, 方便配置和使用多数据源。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2021-09-10
- **Last Updated**: 2021-09-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Dynamic beetlSQL spring boot starter
# 简介
dynamic-beetlsql-spring-boot-starter 的主要功能是整合 [dynamic-datasource-spring-boot-starter](https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter) 和 [BeetlSQL](https://gitee.com/xiandafu/beetlsql), 方便配置和使用多数据源。
支持 **Jdk 1.8+,SpringBoot 2.x.x, dynamic-datasource-spring-boot-starter 3.4.1, beetlSQL 3.7.0-RELEASE**。
# 特性
1. 支持 dynamic-datasource-spring-boot-starter 多数据源配置。
2. 支持 dynamic-datasource-spring-boot-starter 通过注解切换多数源。
3. 支持 BeetlSQL 多个 SqlManager 配置。
4. 支持 BeetlSQL ConditionalSqlManager 配置。
5. 支持 BeetlSQL ConditionalConnectionSource 配置。
# ChangeLog
### v1.0.0
1. 增加 dynamicDatasourceProvider 方式,数据源配置可由数据库表中定义
### v0.9.x
1. 整合 BeetlSQL 和 dynamic-datasource-spring-boot-starter 多数据源配置。
2. 增加 dynamic-datasource-spring-boot-starter 通过注解切换多数源。
3. 增加 BeetlSQL 多种配置方式,如多个 SqlManager 配置,ConditionalSqlManager,ConditionalConnectionSource 配置。
# 使用方法
### 1. 引入dynamic-beetlsql-spring-boot-starter。
```xml
com.qeedata
dynamic-beetlsql-spring-boot-starter
1.0.0
```
### 2. 配置数据源。
```properties
# 参照并按 dynamic-datasource-spring-boot-starter 规则
# 设置默认的数据源或者数据源组,默认值即为 ds1
spring.datasource.dynamic.primary = ds1
spring.datasource.dynamic.p6spy = false
spring.datasource.dynamic.strict = false
# ds1
spring.datasource.dynamic.datasource.ds1.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.ds1.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.datasource.dynamic.datasource.ds1.username=user
spring.datasource.dynamic.datasource.ds1.password=password
# ds2
spring.datasource.dynamic.datasource.ds2.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.ds2.url=jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.datasource.dynamic.datasource.ds2.username=user
spring.datasource.dynamic.datasource.ds2.password=password
```
### 3. 配置 BeetlSQL。
有几种配置方式,以适应不同的应用场景:
#### A. 单独 sqlManager 模式
```properties
dynamic.beetlsql.sm.ds = ds1
dynamic.beetlsql.sm.sqlPath = sql
dynamic.beetlsql.sm.nameConversion = org.beetl.sql.core.JPA2NameConversion
dynamic.beetlsql.sm.daoSuffix = Dao
dynamic.beetlsql.sm.basePackage = com.qeedata.sample
dynamic.beetlsql.sm.dbStyle = org.beetl.sql.core.db.MySqlStyle
```
#### B. dynamicSqlManager 模式
使用同一个 SqlManager 来切换多个不同的 SqlManager,需先配置好多个 SqlManager
使用 BeetlSql 的 ConditionalSqlManager
```properties
dynamic.beetlsql.sm1.xxx = xxx
...
dynamic.beetlsql.sm2.xxx = xxx
dynamic.beetlsql.sm.sqlPath = sql
dynamic.beetlsql.sm.nameConversion = org.beetl.sql.core.JPA2NameConversion
dynamic.beetlsql.sm.daoSuffix = Dao
dynamic.beetlsql.sm.basePackage = com.qeedata.sample
dynamic.beetlsql.sm.dbStyle = org.beetl.sql.core.db.MySqlStyle
dynamic.beetlsql.sm.dynamicSqlManager = sm1,sm2
```
#### C. dynamicConnectionSource 模式
使用一个 sqlManager 切换多个不同的 Datasource,需先配置好多个 Datasource
使用 BeetlSql 的 ConditionalConnectionSource
```properties
spring.datasource.dynamic.datasource.ds1.xxx = xxx
...
spring.datasource.dynamic.datasource.ds2.xxx = xxx
...
spring.datasource.dynamic.datasource.ds3.xxx = xxx
dynamic.beetlsql.sm.sqlPath = sql
dynamic.beetlsql.sm.nameConversion = org.beetl.sql.core.JPA2NameConversion
dynamic.beetlsql.sm.daoSuffix = Dao
dynamic.beetlsql.sm.basePackage = com.qeedata.sample
dynamic.beetlsql.sm.dbStyle = org.beetl.sql.core.db.MySqlStyle
dynamic.beetlsql.sm.dynamicConnectionSource = ds1,ds2,ds3
```
#### D. dynamicDatasourceProvider 模式
使用一个 sqlManager 切换多个不同的 Datasource,
同 dynamicConnectionSource,不过多个 Datasource 配置通过实现 DynamicDatasourceConfigProvider 提供,
通常用于动态数据源由数据库表中定义,然后由 dynamicDatasourceProvider 指定的 SqlManager 来获取,参照 sample.
使用 BeetlSql 的 ConditionalConnectionSource
```properties
dynamic.beetlsql.smMaster.xxx = xxx
dynamic.beetlsql.smComm.sqlPath = sql
dynamic.beetlsql.smComm.nameConversion = org.beetl.sql.core.JPA2NameConversion
dynamic.beetlsql.smComm.daoSuffix = Dao
dynamic.beetlsql.smComm.basePackage = com.qeedata.sample
dynamic.beetlsql.smComm.dbStyle = org.beetl.sql.core.db.MySqlStyle
dynamic.beetlsql.smComm.dynamicDatasourceProvider = smMaster
```
java bean
```java
@Bean
public DynamicDatasourceConfigProvider dynamicDatasourceConfigProvider() {
return new DynamicDatasourceConfigProvider() {
@Override
public Map getDataSourcePropertyMap(SQLManager sqlManager, String param) {
Map map = new HashMap<>();
// 测试
List