一、数据源配置
shardingsphere:
props:
# 控制台打印sql日志
sql.show: true
datasource:
# 数据源名称
names: ds0,ds1
ds0:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: Hss1356955215
url: jdbc:mysql://localhost:3306/sharding0?serverTimezone=UTC
maxPoolSize: 100
minPoolSize: 5
ds1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: Hss1356955215
url: jdbc:mysql://localhost:3306/sharfing1?serverTimezone=UTC
maxPoolSize: 100
minPoolSize: 5
二、分库策略 (接上)
1.Groovy表达式策略
sharding:
tables:
# 逻辑表名:SQL里面写的表名
login_info:
# 实际表:真正操作的表
actual-data-nodes: ds$->{0..1}.login_info
# 分表策略
databaseStrategy.inline:
shardingColumn: u_id
algorithmExpression: ds$->{u_id % 2}
2.Java类配置策略
yml内配置实现类的 完整类名
sharding:
tables:
login_info:
actual-data-nodes: ds$->{0..1}.login_info
databaseStrategy.standard:
shardingColumn: u_id
preciseAlgorithmClassName: com.example.study.config.UidAlgorithm
Java类中实现,以下的配置等效于上面Groovy表达式策略的配置,但是Java类配置可以实现更加复杂的
public class UidAlgorithm implements PreciseShardingAlgorithm<Long> {
private final Logger logger = LoggerFactory.getLogger(UidAlgorithm.class);
@Override
public String doSharding(Collection<String> collection, PreciseShardingValue<Long> preciseShardingValue) {
// u_id的值
Long value = preciseShardingValue.getValue();
if (value % 2 == 0) {
return "ds0";
}
// 数据源名
return "ds1";
}
}