需求
在系统中可能会遇到 动态数据源 以及分表分库,动态分表
的情况,动态数据源切换 采用的
分表分库采用
将表shardingsphere 交给DynamicDataSource管理
特别注意 这里的DataSource 指定 ShardingDataSource 不然后面刷新Sharding动态表时会转换失败。
动态刷新表
特别注意 我这里是按年分表 ,具体的分表策略你们自己安需求弄。
配置 yml
spring:
main:
allow-bean-definition-overriding: true
######## 配置多数据源 ########
datasource:
dynamic:
#严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
strict: true
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:192.168.0.252}:${DATASOURCE_PORT:3306}/iot_platform?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
username: ${DATASOURCE_USERNAME:root}
password: ${DATASOURCE_PASSWORD:123456}
### 这里采用的按年分表策略 对拉取的公厕硬件设备数据进行分表 暂时不分库 #####
shardingsphere:
props:
sql:
show: true
datasource:
names: toilet
### 主数据库 ###
toilet:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:192.168.0.252}:${DATASOURCE_PORT:3306}/iot_toilet?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
username: ${DATASOURCE_USERNAME:root}
password: ${DATASOURCE_PASSWORD:123456}
sharding:
tables:
wc_passenger:
### 数据表 按年分表 #### 流量
actual-data-nodes: toilet.wc_passenger
table-strategy:
standard:
sharding-column: created_time
precise-algorithm-class-name: xxx
range-algorithm-class-name: xxxx