# springboot-shardingsphere-demo
**Repository Path**: zwh_9527/springboot-shardingsphere-demo
## Basic Information
- **Project Name**: springboot-shardingsphere-demo
- **Description**: 编写的sharding jdbc主从独写分离,表分片, 分库分表配置示例
sharding jbc 4.1.1版本和sharding jdbc 5.2.1版本
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-05-18
- **Last Updated**: 2023-09-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 分库分表, Java
## README
# springboot-shardingsphere-demo
## springboot-sharding5模块
使用maven依赖
```
org.apache.shardingsphere
shardingsphere-jdbc-core-spring-boot-starter
5.2.1
```
配置文件的配置参数基本上相同。
详细的配置文件解释信息可以查看:
[application-remark.yml文件](https://gitee.com/zwh_9527/springboot-shardingsphere-demo/blob/master/springboot-shardingjdbc5/src/main/resources/config/application-remark.yml)
## springboot-sharding4模块
基于sharding-jdbc-spring-boot-starter 4.1.1 maven依赖编写测试代码
```
org.apache.shardingsphere
sharding-jdbc-spring-boot-starter
4.1.1
```
#### Description
基于sharding-jdbc-spring-boot-starter 4.1.1依赖编写的sharding jdbc主从独写分离,表分片, 分库分表配置示例
1. application-test1.yml 配置文件--》 单表的分库分表配置
2. application-test2.yml --》实现主从读写分离下的表分片配置
3. application-test3.yml --》读写分离配置
### application-test1.yml文件说明
```
actual-data-nodes: xxljob$->{(0..1).collect{t->t.toString().padLeft(2,'0')}}.xxl_job_user$->{(0..1).collect{t ->t.toString().padLeft(2,'0')} }
```
上面的配置,使用的是 inline行表达式
使用Groovy的Inline表达式进行处理
会生成的结果为
```
xxljob00 数据源名称(要对应到数据源名称datasourceName,spring.shardingsphere.datasource..url)
xxl_job_user00 分片表名称(数据源下要有这个表名,不然启动会报错)
xxl_job_user01
xxljob01 数据源名称
xxl_job_user00 分片表名称
xxl_job_user01
```
参考链接:
http://www.noobyard.com/article/p-bkoscwth-a.html
### 主从读写分离下注意事项
如果数据源名称被主从的配置规则使用掉了,则这个数据源名称就不能被其他地方使用
例如:
spring.shardingsphere.datasource.names: xxljob0,xxljob1
```
# 配置分片规则
sharding:
# 配置 (主从数据库)读写分离规则,
master-slave-rules:
# 配置主从名称,可以任意取名字
xxl_job_ms_rule:
# 配置主库master,负责数据的写入
master-data-source-name: xxljob0
# 配置从库slave节点,多个从节点以逗号分隔
slave-data-source-names: xxljob0,xxljob1
tables:
xxl_job_user:
#语法规则:由:数据源名.表名 组成
# 由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,
# 支持 inline 表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点,
# 用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况
actual-data-nodes: xxljob0.xxl_job_user$->{(0..1).collect{t ->t.toString().padLeft(2,'0')} }
```
xxljob0数据源被主从读写分离规则使用掉了, 在表分片规则中又被使用,会导致启动报错。