使用ShardingSphereDataSource场景
SDK还支持使用ShardingSphereDataSource,此时,需要修改yml配置,单独将sharding配置放在yml同级目录,并在yml中设置sharding配置文件名,示例如下:
引入依赖:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>5.0.0</version>
</dependency>
配置示例:
# 数据源配置 - 必选
sources:
ds1:
type: org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource // 数据源类型
ymlFile: sharding.yml
ds2:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://127.0.0.1:8080/ds1
username: datasourceuser
password: datasourcepwd
type: com.zaxxer.hikari.HikariDataSource
# 路由配置 - 必选
router:
active: dc1 // 当前激活节点
routeAlgorithm: single-read-write // 路由策略
nodes:
dc1:
master: ds1
dc2:
master: ds2
上面配置,仅ds1使用了ShardingSphereDataSource,ds2仍使用HikariDataSource,如果ds2也需要使用ShardingSphereDataSource,将ds2的type和ymlFile同样配置即可。
sharding配置参考shardingsphere官网,下面给出读写分离和分库分表的例子:
分库分表:
schemaName: ms
dataSources:
ds0:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://100.100.139.118:3307/devspore-ds0
username:
password:
ds1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://100.100.139.118:3307/devspore-ds1
username:
password:
rules:
- !SHARDING
bindingTables:
- t_order,t_order_detail
broadcastTables:
- t_login
- t_address
- t_shopping_cart
- t_bank
tables:
t_order_detail:
actualDataNodes: ds$->{0..1}.t_order_detail_$->{0..2}
tableStrategy:
standard:
shardingAlgorithmName: mod
shardingColumn: id
databaseStrategy:
standard:
shardingColumn: guest_id
shardingAlgorithmName: mod
t_order:
actualDataNodes: ds$->{0..1}.t_order_$->{0..2}
tableStrategy:
standard:
shardingAlgorithmName: mod
shardingColumn: id
databaseStrategy:
standard:
shardingColumn: guest_id
shardingAlgorithmName: mod
shardingAlgorithms:
mod:
type: MOD
props:
sharding-count: 2
props:
sql-show: true
- 上面配置数据库用户名和密码未填,用户按需补充。
- 上面提供的配置只是一个例子,实际配置用户按自己的分库分表需求进行配置,这部分配置跟shardingsphere本身的分库分表配置一致。
读写分离:
schemaName: ms
dataSources:
master:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://100.100.139.118:3307/devspore-ds0
username:
password:
slave0:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://100.100.139.118:3307/devspore-ds0-slave0
username:
password:
slave1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://100.100.139.118:3307/devspore-ds0-slave1
username: coral
password: Coral
rules:
- !READWRITE_SPLITTING
dataSources:
ms_ds:
writeDataSourceName: master
readDataSourceNames:
- slave0
- slave1
loadBalancerName: roundRobin
loadBalancers:
roundRobin:
type: ROUND_ROBIN
props:
sql-show: true