本篇文章只适用于已知表数量的,不适合动态创建表。
1、配置文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2b8
druid:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 5
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
shardingsphere:
datasource:
names: db0
db0:
data-source-name: com.alibaba.druid.pool.DruidDataSource
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
rules:
sharding:
# 时间范围分片算法算法配置
sharding-algorithms:
time-inline:
type: INTERVAL
props:
datetime-pattern: "yyyy-MM-dd HH:mm:ss"#分片键的时间戳格式,必须遵循 Java DateTimeFormatter 的格式。例如:yyyy-MM-dd HH:mm:ss
sharding-suffix-pattern: "yyyyMM"#分片数据源或真实表的后缀格式,必须遵循 Java DateTimeFormatter 的格式
datetime-lower: "2024-04-01 00:00:00"#时间分片下界值
datetime-upper: "2024-06-30 00:00:00"#时间分片上界值
datetime-interval-amount: 1 #分片键时间间隔,超过该时间间隔将进入下一分片
datetime-interval-unit: MONTHS #分片键时间间隔单位,必须遵循 Java ChronoUnit 的枚举值。例如:MONTHS
tables:
mq_message:
logicTable: mq_message
actual-data-nodes: db0.mq_message_202404,db0.mq_message_202405, db0.mq_message_202406
# 配置分表策略
table-strategy:
standard:
sharding-column: create_time #分片的字段
sharding-algorithm-name: time-inline
props:
sql-show: true
2、在入口类中加入下面注解,需要忽略druid连接池的默认数据源配。不加会报错
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
结果:
根据create_time自动插入到不同数据表中。
查询可以看到联合了三张表数据。
后期:加入动态创建表,并读取数据