From 30ac3f7c72a864283bdde5926f246f385f1dc221 Mon Sep 17 00:00:00 2001
From: JEECG <445654970@qq.com>
Date: Tue, 14 Oct 2025 16:02:15 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7shardingsphere-jdbc=E7=89=88?=
=?UTF-8?q?=E6=9C=AC=E5=88=B05.5.0=EF=BC=8C=E9=9C=80=E8=A6=81=E6=89=8B?=
=?UTF-8?q?=E5=B7=A5=E9=85=8D=E7=BD=AEShardingSphere=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E6=BA=90=E5=88=B0spring.datasource.dynamic.datasource=E4=B8=AD?=
=?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=B3=95=E6=9B=B4=E6=98=8E=E7=A1=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../jeecg-system-start/pom.xml | 7 +
.../src/main/resources/application-dev.yml | 10 +-
.../config/分库分表/jeecg-sharding-multi.yaml | 59 ------
.../docs/config/分库分表/jeecg-sharding.yaml | 33 ----
.../jeecg-system-cloud-start/pom.xml | 6 +-
.../src/main/resources/application.yml | 9 +-
.../README-ShardingSphere配置说明.md | 176 ++++++++++++++++++
.../StandardModTableShardAlgorithm.java | 22 ---
.../JeecgShardingDemoController.java | 16 +-
.../impl/ShardingSysLogServiceImpl.java | 4 +-
.../resources/application-sharding-multi.yml | 72 -------
.../main/resources/application-sharding.yml | 45 -----
.../src/main/resources/sharding-multi.yaml | 67 +++++++
.../src/main/resources/sharding.yaml | 40 ++++
jeecg-boot/pom.xml | 9 +-
15 files changed, 324 insertions(+), 251 deletions(-)
delete mode 100644 jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding-multi.yaml
delete mode 100644 jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding.yaml
create mode 100644 jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/README-ShardingSphere配置说明.md
delete mode 100644 jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding-multi.yml
delete mode 100644 jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml
create mode 100644 jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding-multi.yaml
create mode 100644 jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding.yaml
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml b/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml
index 09c47fda0..06e75b927 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/pom.xml
@@ -42,6 +42,13 @@
jakarta.servlet
jakarta.servlet-api
+
+
+
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
index 1f0f2d31c..09e1b3487 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
@@ -153,12 +153,10 @@ spring:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
- # 多数据源配置
- #multi-datasource1:
- #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
- #username: root
- #password: root
- #driver-class-name: com.mysql.cj.jdbc.Driver
+# # shardingjdbc数据源
+# sharding-db:
+# driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
+# url: jdbc:shardingsphere:classpath:sharding.yaml
#redis 配置
data:
redis:
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding-multi.yaml b/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding-multi.yaml
deleted file mode 100644
index 98584bac6..000000000
--- a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding-multi.yaml
+++ /dev/null
@@ -1,59 +0,0 @@
-spring:
- shardingsphere:
- datasource:
- names: ds0,ds1
- ds0:
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
- type: com.alibaba.druid.pool.DruidDataSource
- username: root
- password: root
- ds1:
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot2?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
- type: com.alibaba.druid.pool.DruidDataSource
- username: root
- password: root
- props:
- sql-show: true
- rules:
- replica-query:
- load-balancers:
- round-robin:
- type: ROUND_ROBIN
- props:
- default: 0
- data-sources:
- prds:
- primary-data-source-name: ds0
- replica-data-source-names: ds1
- load-balancer-name: round_robin
- sharding:
- binding-tables:
- - sys_log
- key-generators:
- snowflake:
- type: SNOWFLAKE
- props:
- worker-id: 123
- sharding-algorithms:
- table-classbased:
- props:
- strategy: standard
- algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm
- type: CLASS_BASED
- database-inline:
- type: INLINE
- props:
- algorithm-expression: ds$->{operate_type % 2}
- tables:
- sys_log:
- actual-data-nodes: ds$->{0..1}.sys_log$->{0..1}
- database-strategy:
- standard:
- sharding-column: operate_type
- sharding-algorithm-name: database-inline
- table-strategy:
- standard:
- sharding-algorithm-name: table-classbased
- sharding-column: log_type
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding.yaml b/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding.yaml
deleted file mode 100644
index 6c7aecfb4..000000000
--- a/jeecg-boot/jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-spring:
- shardingsphere:
- datasource:
- names: ds0
- ds0:
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
- username: root
- password: root
- type: com.alibaba.druid.pool.DruidDataSource
- props:
- sql-show: true
- rules:
- sharding:
- binding-tables: sys_log
- key-generators:
- snowflake:
- type: SNOWFLAKE
- props:
- worker-id: 123
- sharding-algorithms:
- table-classbased:
- props:
- strategy: standard
- algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm
- type: CLASS_BASED
- tables:
- sys_log:
- actual-data-nodes: ds0.sys_log$->{0..1}
- table-strategy:
- standard:
- sharding-algorithm-name: table-classbased
- sharding-column: log_type
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/pom.xml b/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/pom.xml
index dcbf70080..bfa0b2888 100644
--- a/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/pom.xml
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/pom.xml
@@ -71,7 +71,11 @@
org.jeecgframework.boot3
jeecg-cloud-test-shardingsphere
${jeecgboot.version}
- -->
+
+
+ org.jeecgframework.boot3
+ jeecg-boot-starter-shardingsphere-nacos
+ -->
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/application.yml b/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/application.yml
index 53f5eed66..542974dbe 100644
--- a/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/application.yml
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/application.yml
@@ -21,4 +21,11 @@ spring:
config:
import:
- optional:nacos:jeecg.yaml
- - optional:nacos:jeecg-@profile.name@.yaml
\ No newline at end of file
+ - optional:nacos:jeecg-@profile.name@.yaml
+# #shardingjdbc数据源
+# datasource:
+# dynamic:
+# datasource:
+# sharding-db:
+# driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
+# url: jdbc:shardingsphere:nacos:sharding.yaml?serverAddr=@config.server-addr@&namespace=@config.namespace@&group=@config.group@
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/README-ShardingSphere配置说明.md b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/README-ShardingSphere配置说明.md
new file mode 100644
index 000000000..e5f3d150c
--- /dev/null
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/README-ShardingSphere配置说明.md
@@ -0,0 +1,176 @@
+# JeecgBoot ShardingSphere配置使用说明
+
+## 项目中的ShardingSphere配置
+
+本项目使用ShardingSphere实现分库分表功能,主要涉及以下配置文件和组件:
+
+## 1. 配置文件说明
+
+### sharding.yaml - 基础分表配置
+```yaml
+databaseName: sharding-db # 重要:必须与@DS注解中的名称一致
+
+dataSources:
+ ds0:
+ dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+ driverClassName: com.mysql.cj.jdbc.Driver
+ jdbcUrl: jdbc:mysql://localhost:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8
+ username: root
+ password: root
+
+rules:
+ - !SHARDING
+ tables:
+ sys_log: # 分表的逻辑表名
+ actualDataNodes: ds0.sys_log$->{0..1} # 实际表:sys_log0, sys_log1
+ tableStrategy:
+ standard:
+ shardingColumn: log_type # 分片字段
+ shardingAlgorithmName: table_inline
+
+ shardingAlgorithms:
+ table_inline:
+ type: INLINE
+ props:
+ algorithm-expression: sys_log$->{log_type % 2} # 根据log_type取模分表
+```
+
+### sharding-multi.yaml - 分库分表+读写分离配置
+```yaml
+databaseName: sharding-db # 与@DS注解保持一致
+
+dataSources:
+ ds0: # 主库
+ jdbcUrl: jdbc:mysql://localhost:3306/jeecg-boot?...
+ ds1: # 从库
+ jdbcUrl: jdbc:mysql://localhost:3306/jeecg-boot2?...
+
+rules:
+ - !SHARDING
+ tables:
+ sys_log:
+ actualDataNodes: ds$->{0..1}.sys_log$->{0..1} # 2库2表
+ databaseStrategy: # 分库策略
+ standard:
+ shardingColumn: operate_type
+ shardingAlgorithmName: database-inline
+ tableStrategy: # 分表策略
+ standard:
+ shardingColumn: log_type
+ shardingAlgorithmName: table-classbased
+
+ - !READWRITE_SPLITTING # 读写分离
+ dataSources:
+ prds:
+ writeDataSourceName: ds0 # 写库
+ readDataSourceNames: [ds1] # 读库
+```
+
+## 2. Spring Boot配置
+
+### application-dev.yml中的数据源配置
+
+```yaml
+spring:
+ datasource:
+ dynamic:
+ datasource:
+ # 普通数据源
+ master:
+ url: jdbc:mysql://localhost:3306/jeecg-boot
+ username: root
+ password: root
+
+ # ShardingSphere分片数据源
+ sharding-db: # 数据源名称,对应@DS("sharding-db")
+ driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
+ # 本地配置文件方式
+ url: jdbc:shardingsphere:classpath:sharding.yaml
+ # 或者Nacos配置方式
+ url: jdbc:shardingsphere:nacos:sharding.yaml?serverAddr=${spring.cloud.nacos.config.server-addr}&namespace=${spring.cloud.nacos.config.namespace}&group=${spring.cloud.nacos.config.group}
+```
+
+**关键点:**
+- `sharding-db` 是数据源的名称标识
+- 这个名称必须与Service类上的`@DS("sharding-db")`注解保持一致
+
+## 3. Service层使用
+
+### ShardingSysLogServiceImpl类配置
+
+```java
+@Service
+@DS("sharding-db") // 指定使用sharding-db数据源
+public class ShardingSysLogServiceImpl extends ServiceImpl
+ implements IShardingSysLogService {
+}
+```
+
+**配置关系说明:**
+1. `@DS("sharding-db")` 注解告诉MyBatis-Plus使用名为`sharding-db`的数据源
+2. `sharding-db`对应application-dev.yml中配置的数据源名称
+3. 该数据源使用ShardingSphere驱动,会根据sharding.yaml中的规则进行分片
+
+## 4. 使用步骤
+
+### 步骤1:准备数据库表
+```sql
+-- 在jeecg-boot数据库中创建分表
+CREATE TABLE sys_log0 LIKE sys_log;
+CREATE TABLE sys_log1 LIKE sys_log;
+```
+
+### 步骤2:配置application-dev.yml
+```yaml
+spring:
+ datasource:
+ dynamic:
+ datasource:
+ sharding-db:
+ driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
+ url: jdbc:shardingsphere:classpath:sharding.yaml
+```
+
+### 步骤3:配置sharding.yaml
+- 将配置文件放在`src/main/resources/`目录下
+- 确保`databaseName: sharding-db`与数据源名称一致
+
+### 步骤4:在Service上添加注解
+```java
+@DS("sharding-db") // 使用分片数据源
+public class ShardingSysLogServiceImpl {
+ // 业务代码
+}
+```
+
+### 步骤5:正常使用MyBatis-Plus
+```java
+// 插入数据时会自动根据log_type字段进行分表
+shardingSysLogService.save(sysLog);
+
+// 查询时也会根据分片规则路由到正确的表
+shardingSysLogService.list();
+```
+
+## 5. 配置验证
+
+启动项目后查看日志,如果看到类似输出说明配置成功:
+```
+Logic SQL: INSERT INTO sys_log (log_type, content) VALUES (?, ?)
+Actual SQL: ds0 ::: INSERT INTO sys_log0 (log_type, content) VALUES (?, ?)
+```
+
+## 6. 注意事项
+
+1. **名称一致性**:确保以下三处名称完全一致
+ - application-dev.yml中的数据源名称:`sharding-db`
+ - sharding.yaml中的databaseName:`sharding-db`
+ - Service类注解:`@DS("sharding-db")`
+
+2. **表结构一致**:所有分片表的结构必须完全一致
+
+3. **分片键选择**:选择分布均匀的字段作为分片键,避免数据倾斜
+
+4. **事务支持**:单表事务正常,跨表事务需要注意
+
+这样配置后,通过ShardingSysLogServiceImpl操作的数据会自动根据分片规则分布到不同的表中。
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/algorithm/StandardModTableShardAlgorithm.java b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/algorithm/StandardModTableShardAlgorithm.java
index 73f27a53e..efda75635 100644
--- a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/algorithm/StandardModTableShardAlgorithm.java
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/algorithm/StandardModTableShardAlgorithm.java
@@ -52,13 +52,6 @@ public class StandardModTableShardAlgorithm implements StandardShardingAlgorithm
return collection;
}
- /**
- * 初始化对象的时候调用的方法
- */
- @Override
- public void init() {
- }
-
/**
* 对应分片算法(sharding-algorithms)的类型
*
@@ -68,19 +61,4 @@ public class StandardModTableShardAlgorithm implements StandardShardingAlgorithm
public String getType() {
return "STANDARD_MOD";
}
-
- @Override
- public Properties getProps() {
- return this.props;
- }
-
- /**
- * 获取分片相关属性
- *
- * @param properties
- */
- @Override
- public void setProps(Properties properties) {
- this.props = properties;
- }
}
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java
index 44d0ae011..2aa93b58d 100644
--- a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java
@@ -23,23 +23,23 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Tag(name = "分库分表测试")
@RestController
-@RequestMapping("/sharding")
+@RequestMapping("/demo/sharding")
public class JeecgShardingDemoController extends JeecgController {
@Autowired
private IShardingSysLogService shardingSysLogService;
/**
- * 单库分表 —— 添加
+ * 单库分表 —— 插入
* @return
*/
- @PostMapping(value = "/test1")
+ @PostMapping(value = "/insert")
@Operation(summary = "单库分表插入")
- public Result> add() {
+ public Result> insert() {
log.info("---------------------------------单库分表插入--------------------------------");
int size = 10;
for (int i = 0; i < size; i++) {
ShardingSysLog shardingSysLog = new ShardingSysLog();
- shardingSysLog.setLogContent("jeecg");
+ shardingSysLog.setLogContent("采用shardingsphere实现分库分表,插入测试!");
shardingSysLog.setLogType(i);
shardingSysLog.setOperateType(i);
shardingSysLogService.save(shardingSysLog);
@@ -51,7 +51,7 @@ public class JeecgShardingDemoController extends JeecgController list() {
return Result.OK(shardingSysLogService.list());
@@ -61,9 +61,9 @@ public class JeecgShardingDemoController extends JeecgController test2() {
+ public Result> insert2() {
int start=20;
int size=30;
for (int i = start; i <= size; i++) {
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/service/impl/ShardingSysLogServiceImpl.java b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/service/impl/ShardingSysLogServiceImpl.java
index 242a8a0fa..b174ca09b 100644
--- a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/service/impl/ShardingSysLogServiceImpl.java
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/service/impl/ShardingSysLogServiceImpl.java
@@ -13,7 +13,7 @@ import org.springframework.stereotype.Service;
* @date: 2022/04/21
*/
@Service
-@DS("sharding")
+@DS("sharding-db")
public class ShardingSysLogServiceImpl extends ServiceImpl implements IShardingSysLogService {
-}
+}
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding-multi.yml b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding-multi.yml
deleted file mode 100644
index 52c1ae50e..000000000
--- a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding-multi.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-# 双库分表配置
-spring:
- shardingsphere:
- props:
- sql-show: true
- datasource:
- ds0:
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
- type: com.alibaba.druid.pool.DruidDataSource
- username: root
- password: root
- ds1:
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot2?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
- type: com.alibaba.druid.pool.DruidDataSource
- username: root
- password: root
- names: ds0,ds1
- # 规则配置
- rules:
- replica-query:
- # 负载均衡算法
- load-balancers:
- round-robin:
- type: ROUND_ROBIN
- props:
- default: 0
- data-sources:
- prds:
- primary-data-source-name: ds0
- replica-data-source-names: ds1
- load-balancer-name: round_robin
- sharding:
- # 配置绑定表,每一行为一组,绑定表会提高查询效率
- binding-tables:
- - sys_log
- # 分布式序列算法配置
- key-generators:
- snowflake:
- type: SNOWFLAKE
- props:
- worker-id: 123
- # 分片算法配置
- sharding-algorithms:
- table-classbased:
- props:
- strategy: standard
- algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm
- type: CLASS_BASED
- # 通过operate_type取模的方式确定数据落在哪个库
- database-inline:
- type: INLINE
- props:
- algorithm-expression: ds$->{operate_type % 2}
- tables:
- # 逻辑表名称
- sys_log:
- #配置具体表的数据节点
- actual-data-nodes: ds$->{0..1}.sys_log$->{0..1}
- # 分库策略
- database-strategy:
- standard:
- sharding-column: operate_type
- sharding-algorithm-name: database-inline
- # 分表策略
- table-strategy:
- standard:
- # 分片算法名称
- sharding-algorithm-name: table-classbased
- # 分片列名称
- sharding-column: log_type
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml
deleted file mode 100644
index 2cd03f45b..000000000
--- a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-#单库分表配置
-spring:
- shardingsphere:
- props:
- sql-show: true
- datasource:
- #添加分库数据源
- ds0:
- driverClassName: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
- username: root
- password: root
- type: com.alibaba.druid.pool.DruidDataSource
- names: ds0
- # 规则配置
- rules:
- sharding:
- # 配置绑定表,每一行为一组
- binding-tables: sys_log
- # 分布式序列算法配置
- key-generators:
- snowflake:
- type: SNOWFLAKE
- props:
- worker-id: 123
- # 分片算法配置
- sharding-algorithms:
- table-classbased:
- props:
- strategy: standard
- # 自定义标准分配算法
- algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm
- type: CLASS_BASED
- tables:
- # 逻辑表名称
- sys_log:
- #配置具体表的数据节点
- actual-data-nodes: ds0.sys_log$->{0..1}
- # 分表策略
- table-strategy:
- standard:
- # 分片算法名称
- sharding-algorithm-name: table-classbased
- # 分片列名称(对应数据库字段)
- sharding-column: log_type
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding-multi.yaml b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding-multi.yaml
new file mode 100644
index 000000000..a604db7a2
--- /dev/null
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding-multi.yaml
@@ -0,0 +1,67 @@
+# !!!数据源名称要和动态数据源中配置的名称一致
+databaseName: sharding-db
+
+# 具体参看官网文档说明
+dataSources:
+ ds0:
+ dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+ driverClassName: com.mysql.cj.jdbc.Driver
+ jdbcUrl: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+ password: root
+ username: root
+ ds1:
+ dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+ driverClassName: com.mysql.cj.jdbc.Driver
+ jdbcUrl: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot2?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+ password: root
+ username: root
+
+rules:
+ - !SHARDING
+ bindingTables:
+ - sys_log
+ tables:
+ sys_log:
+ actualDataNodes: ds$->{0..1}.sys_log$->{0..1}
+ databaseStrategy:
+ standard:
+ shardingColumn: operate_type
+ shardingAlgorithmName: database-inline
+ tableStrategy:
+ standard:
+ shardingColumn: log_type
+ shardingAlgorithmName: table-classbased
+ keyGenerateStrategy:
+ column: id
+ keyGeneratorName: snowflake
+
+ keyGenerators:
+ snowflake:
+ type: SNOWFLAKE
+ props:
+ worker-id: 123
+
+ shardingAlgorithms:
+ database-inline:
+ type: INLINE
+ props:
+ algorithm-expression: ds$->{operate_type % 2}
+ table-classbased:
+ type: CLASS_BASED
+ props:
+ strategy: standard
+ algorithmClassName: org.jeecg.modules.test.sharding.algorithm.StandardModTableShardAlgorithm
+
+ - !READWRITE_SPLITTING
+ dataSources:
+ prds:
+ writeDataSourceName: ds0
+ readDataSourceNames:
+ - ds1
+ loadBalancerName: round-robin
+ loadBalancers:
+ round-robin:
+ type: ROUND_ROBIN
+
+props:
+ sql-show: true
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding.yaml b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding.yaml
new file mode 100644
index 000000000..553c94f5c
--- /dev/null
+++ b/jeecg-boot/jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/sharding.yaml
@@ -0,0 +1,40 @@
+# !!!数据源名称要和动态数据源中配置的名称一致
+databaseName: sharding-db
+
+# 具体参看官网文档说明
+dataSources:
+ db_0:
+ dataSourceClassName: com.zaxxer.hikari.HikariDataSource
+ driverClassName: com.mysql.cj.jdbc.Driver
+ jdbcUrl: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+ password: root
+ username: root
+
+rules:
+ - !SHARDING
+ tables: # 数据分片规则配置
+ sys_log: # 逻辑表名称
+ actualDataNodes: db_0.sys_log$->{0..1} # 由数据源名 + 表名组成(参考 Inline 语法规则)
+ databaseStrategy: # 分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一
+ none:
+ tableStrategy: # 分表策略
+ standard: # 用于单分片键的标准分片场景
+ shardingColumn: log_type # 分片列名称
+ shardingAlgorithmName: user_inline
+ keyGenerateStrategy:
+ column: id
+ keyGeneratorName: snowflake
+ keyGenerators:
+ snowflake:
+ type: SNOWFLAKE
+ props:
+ worker-id: 123
+ # 分片算法配置
+ shardingAlgorithms:
+ user_inline:
+ type: INLINE
+ props:
+ algorithm-expression: sys_log$->{log_type % 2}
+
+props:
+ sql-show: true
\ No newline at end of file
diff --git a/jeecg-boot/pom.xml b/jeecg-boot/pom.xml
index b6c7d5136..1a022100e 100644
--- a/jeecg-boot/pom.xml
+++ b/jeecg-boot/pom.xml
@@ -66,7 +66,7 @@
3.5.12
- 4.1.3
+ 4.3.1
1.2.24
2.11.0
@@ -245,7 +245,12 @@
org.jeecgframework.boot3
jeecg-boot-starter-shardingsphere
- ${jeecgboot.version}
+ 3.8.3.1
+
+
+ org.jeecgframework.boot3
+ jeecg-boot-starter-shardingsphere-nacos
+ 3.8.3.1
org.hibernate