新版本的shardingsphere配置查了很多材料,最后终于配置完成,做个记录。springboot版本2.7.18
先说明下springboot的支持只到5.2.1,但是因为旧版本有漏洞问题,加上官方新版本不在支持springboot写法,所以改成了shardingsphere-jdbc。
maven的版本
<shardingsphere.version>5.5.1</shardingsphere.version>
<snakeyaml.version>2.3</snakeyaml.version>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc</artifactId>
<version>${shardingsphere.version}</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>${snakeyaml.version}</version>
</dependency>
sharding.xml
dataSources:
nemesismaster:
dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://xxx/nemesis?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8&useSSL=false
username: xxx
password: xxx
rules:
- !SHARDING
tables:
risk_record:
actualDataNodes: nemesismaster.risk_record
tableStrategy:
standard:
shardingColumn: create_time
shardingAlgorithmName: aaa
shardingAlgorithms:
aaa:
type: CLASS_BASED
props:
strategy: standard
algorithmClassName: com.xxx.xxx.nemesis.shardingsphere.TimeShardingAlgorithm
# interval:
# type: INTERVAL
# props:
# datetime-pattern: 'yyyy-MM'
# datetime-lower: '2024-01'
# datetime-upper: '2025-12'
# sharding-suffix-pattern: 'yyyyMM'
# # 间隔大小
# datetime-interval-amount: 1
# datetime-interval-unit: 'Months'
- !SINGLE
tables:
- "*.*"
props:
sql-show: true
yml的配置里面加上
spring:
datasource:
dynamic:
datasource:
shardingSphere:
url: jdbc:shardingsphere:classpath:sharding.yml
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
分片算法
package com.xxx.xxx.nemesis.shardingsphere;
import com.google.common.collect.Range;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.sharding.api.sharding.ShardingAutoTableAlgorithm;
import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 分片算法,按月分片
*/
@Slf4j
public final class TimeShardingAlgorithm implements StandardShardingAlgorithm<Timestamp>, ShardingAutoTableAl