目前市面上的分库分表策略一般比较通用的是使用sharding 和mycat,我只接触过sharding jdbc,此处mycat 不做说明
引用pom
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
application,properties
#多库配置
spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=shan
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=shan
#显示sql打印
spring.shardingsphere.props.sql.show=true
#自定义分库策略
spring.shardingsphere.sharding.default-database-strategy.standard.sharding-column=student_id
spring.shardingsphere.sharding.default-database-strategy.standard.precise-algorithm-class-name=com.shan.sharding.DatabasePreciseShardingAlgorithm
##只分库 不分表(单片分库)
spring.shardingsphere.sharding.tables.mf_repay_plan.actual-data-nodes=ds$->{0..1}.studnet
##分库分表
#spring.shardingsphere.sharding.tables.mf_repay_plan.actual-data-nodes=ds$->{0..1}.studnet$->{0..1}
#spring.shardingsphere.sharding.tables.mf_repay_plan.table-strategy.standard.sharding-column=stduent
#spring.shardingsphere.sharding.tables.mf_repay_plan.table-strategy.standard.precise-algorithm-class-name=com.shan.sharding.TablePreciseShardingAlgorithm
上面配置包含只分库不分表,分库分表的配置
分库策略类
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
import java.util.Collection;
@NoArgsConstructor
public class DatabasePreciseShardingAlgorithm implements PreciseShardingAlgorithm<String> {
@Override
public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {
return "ds"+String.valueOf(preciseShardingValue.getValue().hashCode()%2);
}
}
分表策略类
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
import java.util.Collection;
@NoArgsConstructor
public class TablePreciseShardingAlgorithm implements PreciseShardingAlgorithm<String> {
@Override
public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {
return "student"+String.valueOf(preciseShardingValue.getValue().hashCode()%2);
}
}