4升到5过后还是解决了许多问题,4版本的跨库和子查询问题都可以了,性能也提高了
实现自动创建表,动态获取节点表,配置如下
建表语句可以使用下面这句,解决很多麻烦问题
CREATE TABLE newName LIKE oldName
<!-- ShardingSphere -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.1.0</version>
</dependency>
<!-- 使用druid连接池需要加dbcp依赖 -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>10.0.16</version>
</dependency>
<!-- 使用druid需要注意artifactId, -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.13</version>
</dependency>
<!-- 使用druid就不导这个依赖了,都是连接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
读写分离需要配置数据库有主从同步
spring:
#shardingjdbc主要配置
shardingsphere:
# 是否启用sharding
enabled: true
props:
# 是否显示sql
sql-show: true
datasource:
names: master,slave #数据源名称,多个以逗号隔开
master:
type: ${spring.datasource.type}
driver-class-name: ${spring.datasource.hikari.driver-class-name}
url: ${spring.datasource.hikari.jdbc-url}
username: ${spring.datasource.hikari.username}
password: ${spring.datasource.hikari.password}
slave:
type: ${spring.datasource.type}
driver-class-name: ${spring.datasource.hikari.driver-class-name}
jdbc-url: jdbc:mysql://127.0.0.1:3308/tecloman_dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: ${spring.datasource.hikari.username}
password: 123456
rules:
sharding:
tables:
hss_history: # 分表,逻辑表名 数据库未分表的表名
# 节点数据
actual-data-nodes: master.hss_history,master.hss_history_202$->{201..212} #数据节点,均匀分布
table-strategy: # 配置分表策略
standard: # 用于单分片键的标准分片场景
sharding-column: create_time # 分片列名称
sharding-algorithm-name: hss-history-inline # 分片算法名称 不能使用下划线
# 分片算法配置
sharding-algorithms:
hss-history-inline: # 分片算法名称 不能使用下划线
type: CLASS_BASED #自定义策略
props:
strategy: standard
algorithmClassName: mqtt.server.sharding.DateShardingAlgorithm
#type: INTERVAL # 分片算法类型 时间范围分片算法
#props:
#datetime-pattern: yyyy-MM-dd HH:mm:ss #分片键的时间戳格式
#datetime-lower: 2022-01-01 00:00:00 #时间分片下界值,
#datetime-upper: 2024-01-01 00:00:00 #时间分片上界值
#sharding-suffix-pattern: yyyyMM #分片数据源或真实表的后缀格式
#datetime-interval-amount: 1 #分片键时间间隔,超过该时间间隔将进入下一分片
#datetime-interval-unit: MONTHS #分片键时间间隔单位
binding-tables: hss_history
# 主键生成策略 也可以使用MP的主键生成
default-key-generate-strategy:
column: id # 自增列名称
key-generator-name: id-key # 分布式序列算法名称
key-generators:
id-key:
type: SNOWFLAKE # 分布式序列算法类型
#读写分离配置
readwrite-splitting:
data-sources:
master: # 逻辑数据源名字 不要乱写名字,否则读写分离不生效
type: STATIC #静态类型,(动态Dynamic)
props:
# 主库
write-data-source-name: master
# 从库
read-data-source-names: slave
# 负载均衡算法名称
load-balancer-name: round
# 负载均衡算法
load-balancers:
round: # 负载均衡算法名称
type: ROUND_ROBIN #负载均衡算法类型轮询算法
jackson:
#time-zone: UTC
# UTC会晚8小时 所以要改GMT+8
time-zone: UTC
#date-format: yyyy-MM-dd HH:mm:ss
#default-property-inclusion: non_null
datasource:
type: com.zaxxer