sharding jdbc 简单配置

本文详细介绍了如何在Spring Boot应用中使用ShardingSphere实现数据库分库分表策略,包括配置多数据源、精确分库分表算法的实现,并展示了如何自定义分库和分表策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前市面上的分库分表策略一般比较通用的是使用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);
    }
}
 
### Sharding-JDBC 5.4.1 配置指南 Sharding-JDBC 是一款开源的分布式数据库中间件,支持分库分表等功能。对于版本 5.4.1 的配置,主要涉及以下几个方面: #### 数据源配置 数据源是连接到实际物理数据库的关键组件,在 `application.yml` 或者其他形式的应用配置文件中定义。 ```yaml spring: shardingsphere: datasource: names: ds_0,ds_1 ds_0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db_0?serverTimezone=UTC&useSSL=false username: root password: root ds_1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db_1?serverTimezone=UTC&useSSL=false username: root password: root ``` 此部分指定了两个名为 `ds_0` 和 `ds_1` 的数据源及其对应的 JDBC URL、驱动类名以及登录凭证[^1]。 #### 分片规则设置 通过指定逻辑表名称和真实的物理表名称模式来实现分片策略。 ```yaml rules: sharding: tables: t_order: actual-data-nodes: ds_${0..1}.t_order${0..1} table-strategy: standard: sharding-column: order_id sharding-algorithm-name: database_inline,tbl_inline key-generate-strategy: column: order_id key-generator-name: snowflake ``` 上述配置表示订单表 (`t_order`) 将被拆分为多个子表存储于不同的数据库实例内,并采用特定算法决定具体存放在哪个位置。 #### 关键字生成器声明 用于自动生成唯一主键或其他唯一字段值。 ```yaml key-generators: snowflake: type: SNOWFLAKE sharding-algorithms: database_inline: type: INLINE props: algorithm-expression: ds_${order_id % 2} tbl_inline: type: INLINE props: algorithm-expression: t_order${order_id % 2} ``` 这里定义了一个基于雪花算法(`SNOWFLAKE`)的关键字生成器和两条简单的 inline 类型分片计算表达式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值