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