SpringBoot 集成 Sharding-JDBC 实现易于扩容的分库分表

前言:

今天来聊下 SpringBoot 集成 Sharding-JDBC 实现分库分表;为此写了一个小 Demo ,这个Demo是基于SpringBoot,并集成了 Mybatis、Redis、Swagger(生成在线的接口文档 )、PageHelper(分页工具) 等,当然绝对也集成了 Sharding-JDBC ;以及设计了 RestFul 风格的接口 ,添加了 单元测试 等。

下面简单介绍下本文的主线:

①、首先介绍下Demo的工程目录,并且介绍下使用的基本环境,如:sql、工程的pom.xml等

②、然后会着重介绍 SpringBoot 集成 Sharding-JDBC 的过程,及 Sharding-JDBC 基本知识 和 注意事项。

1、项目信息描述:

完整项目在gitHub,地址: https://github.com/leishen6/SpringBoot_shardDB_shardTable

如有需要请自己去 giHub 上拉取代码进行查阅,由于本人水品有限,如有问题请留言提出,谢谢!

Demo详解:

1、工程目录:

2、工程环境:
2.1、pom.xml :
   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath/>
    </parent>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>

        <mybatis-spring-boot>1.2.0</mybatis-spring-boot>
        <mysql-connector>5.1.39</mysql-connector>
        <fastjson>1.2.41</fastjson>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <!-- Spring Boot Mybatis 依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>

        <!-- MySQL 连接驱动依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--druid 连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.16</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson}</version>
        </dependency>

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!-- pagehelper分页工具 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.6</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>

        <!-- sharding-jdbc -->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.0.0-RC1</version>
        </dependency>

        <!-- hutool 工具类 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-setting</artifactId>
            <version>5.2.4</version>
        </dependency>


        <!-- quartz定时任务 -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>

    </dependencies>

注意:pom.xml 的内容最好不要变动了,因为如果将里面的一些依赖版本变化了,可能会导致依赖版本兼容性问题出现,最终导致程序运行失败。

2.2、sql 环境:

①、数据库使用的 Mysql,Demo程序运行前需要提前创建好数据库,由于使用了分库分表,所以需要创建两个库; 数据库名:springboot0、springboot1

②、在 springboot0 数据库中执行下面的sql语句创建表:

DROP TABLE IF EXISTS `t_role`;
CREATE TABLE `t_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(128) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_user0
-- ----------------------------
DROP TABLE IF EXISTS `t_user0`;
CREATE TABLE `t_user0` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_user1
-- ----------------------------
DROP TABLE IF EXISTS `t_user1`;
CREATE TABLE `t_user1` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_user2
-- ----------------------------
DROP TABLE IF EXISTS `t_user2`;
CREATE TABLE `t_user2` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;

③、然后在创建的 springboot1 数据库中执行sql语句创建表:

DROP TABLE IF EXISTS `t_user0`;
CREATE TABLE `t_user0` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_user1
-- ----------------------------
DROP TABLE IF EXISTS `t_user1`;
CREATE TABLE `t_user1` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_user2
-- ----------------------------
DROP TABLE IF EXISTS `t_user2`;
CREATE TABLE `t_user2` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8;

上面的基本信息介绍完了,接下来介绍重头戏了,Sharding-JDBC 集成之路。嘿嘿 . . . . .

Sharding-JDBC 基本知识:

首先将 Sharding-JDBC 的官网贴出来,也可以去官网进行详细了解。shardingsphere 之 Sharding-JDBC

大家如果没去官网了解过的,也可以通过下面进行了解下哟:

1、基本概念:

Sharding-JDBC 定位为轻量级Java框架,在Java的JDBC层提供的额外服务,所以说它是一款属于 应用层依赖类中间件 。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

应用层依赖类中间件:这类分库分表中间件的特点就是和应用强耦合,需要应用显示依赖相应的jar包。

2、兼容性:
  • 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。
3、架构图:

​ 图片来源:sharding-JDBC官网

4、数据分片:

进行分库分表时,是绕不开 数据分片 的知识的。

数据分片指按照某个维度将存放在单一数据库中的数据分散地存放至多个数据库或表中以达到提升性能瓶颈以及可用性的效果。

数据分片的拆分方式又分为垂直分片水平分片(最为常用的方式)

4.1、垂直分片:

按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。

例如:本来一个库由订单表和用户表构成,由于并发量和数据量太大,可以将这原本的一个库进行拆分,拆分成两个库,一个订单库,里面只有一个订单表,一个用户库,里面只有一个用户表,这样使用两个库就能支持更大的并发量,提升数据库的并发瓶颈。

缺点:

垂直分片往往需要对架构和设计进行调整。通常来讲,是来不及应对互联网业务需求快速变化的;而且,它也并无法真正的解决单点瓶颈。 垂直拆分可以缓解数据量和访问量带来的问题,但无法根治。

4.2、水平分片:

水平分片又称为横向拆分。 相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。

注意:水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是分库分表的标准解决方案。

例如,本文中实现的分库分表就是使用的 水平分片 ; 根据用户表中 name 用户名字段进行分片;

在新增用户数据时,首先根据配置的分片策略(分片策略包含分片算法)判断此用户名的数据到底新增到哪个数据库中,以及哪个表中。

5、内部执行流程:

核心由 SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并 的流程组成。

主要介绍下 SQL路由、SQL改写的概念:

SQL路由:根据解析上下文匹配用户配置的分片策略,并生成最终的路由路径;

SQL改写:将SQL改写为在真实数据库中可以正确执行的语句。

图片来源:sharding-JDBC官网

Sharding-JDBC 集成过程:

1、首先看下 Sharding-JDBC 的配置文件:

下面是Sharding-JDBC 配置文件的内容;

注意:

本工程中的分库分表是分库2个,分表3个,分片键是 name 字段,分库分表都是依据name这个分片键,

分表只有 t_user 表进行分表;


## 分库分表 配置: (下面配置的分库数量、虚拟节点数量等主要是为了实现一致性hash算法进行分片)

# 分库数量
sharding.datasource.count=2

# 分库虚拟节点数量
sharding.datasource.virtual.node.count=360

# 虚拟节点映射到物理节点范围:例如本文中是根据name名字进行分片的, 所以使用名字的hash值对虚拟节点数取余;
# 得到一个0-359的余数,然后按照余数所属的范围, 如果余数在0-179范围则数据分片访问 springboot0 数据源,
# 如果余数在180-359范围,则数据被分片访问 springboot1 数据源; 下面的分表原理一样。
sharding.datasource.virtual.node.count.rang=0-179,180-359

# 分表数量
sharding.table.count=3

# 分表虚拟节点数量
sharding.table.virtual.node.count=360

# 虚拟节点映射到物理节点范围
sharding.table.virtual.node.count.rang=0-119,120-249,250-359


# 实际数据源名字
spring.shardingsphere.datasource.names=springboot0,springboot1

# 数据源
spring.shardingsphere.datasource.springboot0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.springboot0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.springboot0.url=jdbc:mysql://localhost:3306/springboot0?characterEncoding=utf-8&useSSL=false
spring.shardingsphere.datasource.springboot0.username=root
spring.shardingsphere.datasource.springboot0.password=root

spring.shardingsphere.datasource.springboot1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.springboot1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.springboot1.url=jdbc:mysql://localhost:3306/springboot1?characterEncoding=utf-8&useSSL=false
spring.shardingsphere.datasource.springboot1.username=root
spring.shardingsphere.datasource.springboot1.password=root


### 分片策略使用的是: 自定义的分片算法
## 实际的数据节点,符合 groovy 语法; 这里的{0..1}指的是01及其之间的数字,数字有01两个,代表分库是两个;
## 并且拼接在 springboot 后面,就构成了上面配置的实际数据源名称了
spring.shardingsphere.sharding.tables.t_user.actualDataNodes=springboot$->{0..1}.t_user$->{0..2}

## 分片键:name字段
spring.shardingsphere.sharding.tables.t_user.databaseStrategy.standard.shardingColumn=name
## 自定义 分库 算法
spring.shardingsphere.sharding.tables.t_user.databaseStrategy.standard.preciseAlgorithmClassName=com.lyl.algorithm.MyPreciseDBShardingAlgorithm

## 分片键:name字段
spring.shardingsphere.sharding.tables.t_user.tableStrategy.standard.shardingColumn=name
## 自定义 分表 算法
spring.shardingsphere.sharding.tables.t_user.tableStrategy.standard.preciseAlgorithmClassName=com.lyl.algorithm.MyPreciseTableShardingAlgorithm


# 不进行分库分表的数据源指定,使用设置的默认数据源springboot0 ;例如,本文中的 t_role表就不进行
# 分库分表,那关于 t_role 表的增删改差都走默认数据源 springboot0
spring.shardingsphere.sharding.default-data-source-name=springboot0
# 打印执行的数据库以及语句
spring.shardingsphere.props.sql.show=true

# 如果需要更改分库数量,或者分表数量的话,那么也需要对配置文件进行更改;例如:将分库数量改为3个;
# 下面这些配置文件内容需要更改:
# 原配置内容:
sharding.datasource.count=2
sharding.datasource.virtual.node.count.rang=0-179,180-359
spring.shardingsphere.sharding.tables.t_user.actualDataNodes=springboot$->{0..1}.t_user$->{0..2}

# 修改为: 
sharding.datasource.count=3
sharding.datasource.virtual.node.count.rang=0-119,120-249,250-359
spring.shardingsphere.sharding.tables.t_user.actualDataNodes=springboot$->{0..2}.t_user$->{0..2}

2、一致性hash算法:

一致性hash算法学习可参考:白话解析:一致性哈希算法 consistent hashing

首先解释下,sharing-JDBC配置文件中使用的虚拟节点就是为了实现一致性hash算法;

为什么使用一致性hash算法呢?

因为,使用一致性hash算法是为了满足后期可能出现的数据库扩容问题;

在这里来简单介绍下,常用的分片算法(方式):hash方式,一致性hash(consistent hash),按照数据范围(range based)。

上面三种分片方式学习可参考:带着问题学习分布式系统之数据分片

2.1、介绍一致性hash算法为什么易于扩容呢?

结合下文本,本文是根据name字段进行分片的,使用name用户名的hash值对虚拟节点数360取余 ,得到一个

0-359 的余数,然后根据余数匹配配置的虚拟节点范围进行映射实际物理节点,来得到实际的数据源节点等。

如图:

分库 2个,实际数据源 springboot0、springboot1,虚拟节点数360,虚拟节点范围 0-179,180-359

进行扩容:(增加一个数据库)

分库 3个,实际数据源 springboot0、springboot1、springboot2,虚拟节点数360不变,虚拟节点范围

0-179,180-269,270-359

如图,使用一致性hash算法,在扩容时,不会导致整体数据的不可用,只会损失一部分数据;原本分2个库时,应处于springboot1数据源中的数据,在分库3时,进行查询此数据时,会被分片到springboot2中查询,此时会出现查询不到的情况;但是,这也只是损失了一小部分数据,对 0-179 的分库的数据查询等不会造成影响,不会导致整体数据都出现问题。

3、自定义分片算法:
3.1、自定义分库实现:

3.2、自定义分表算法:

4、注意事项:

本项目中只有 t_user 表进行了分库分表,t_role 表没有进行分库分表,t_role 表的增删改差走 默认数据源springboot0

注意 Sharding-JDBC 是不支持跨库查询的;当使用联合查询SQL时,如果在联合查询中存在 进行了分库的表和未进行分库的表 ,那么就可能会出现跨库查询,此时是查询不出数据的;

建议:

  • 如果一定要使用联合查询SQL,那么需要将联合查询中所有的表都进行分库,并且分库时选择的分片键字段需要一致,并将表设置为 绑定表 ,提升联合查询速度;

  • 一般在分库分表后不建议使用多表联合查询,因为会出现上面那种问题;建议使用单表查询,然后使用应用层代码将单表查询的结果集进行整合即可。使用单表查询可以降低数据库端的读写压力,如果数据库端压力过大的话,就需要进行扩容,扩容时就涉及到了数据一致性等问题,所以是比较麻烦的;在使用单表查询时,将压力集中到了服务应用代码上,如果服务应用代码压力很大的话,可以部署集群(多部署几台机器) + Nginx请求转发 就可以提高整体系统的吞吐量了。

–END, 本文结束 . . . . . . . . . . . . . . . .

不要忘记留下你学习的足迹 [点赞 + 收藏 + 评论]嘿嘿ヾ

一切看文章不点赞都是“耍流氓”,嘿嘿ヾ(◍°∇°◍)ノ゙!开个玩笑,动一动你的小手,点赞就完事了,你每个人出一份力量(点赞 + 评论)就会让更多的学习者加入进来!非常感谢! ̄ω ̄=

个人高质量原创Java技术文公众号,欢迎大家关注;关注后如果 不香 ,来捶我啊!嘿嘿。。。。。。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Spring Boot集成Sharding-JDBC可以实现分库分表的功能,提高数据库的性能和扩展性。具体步骤如下: 1. 引入Sharding-JDBC的依赖: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>4.1.1</version> </dependency> ``` 2. 配置Sharding-JDBC的数据源: ```yaml spring: shardingsphere: datasource: names: ds, ds1 ds: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db username: root password: root ds1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1 username: root password: root sharding: tables: user: actual-data-nodes: ds$->{..1}.user_$->{..1} table-strategy: inline: sharding-column: id algorithm-expression: user_$->{id % 2} ``` 3. 配置Sharding-JDBC的规则: ```yaml spring: shardingsphere: sharding: default-database-strategy: inline: sharding-column: id algorithm-expression: ds$->{id % 2} sharding-algorithms: database-inline: type: INLINE props: algorithm-expression: ds$->{id % 2} table-inline: type: INLINE props: algorithm-expression: user_$->{id % 2} ``` 4. 编写代码进行测试: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void addUser(User user) { userMapper.addUser(user); } @Override public User getUserById(Long id) { return userMapper.getUserById(id); } @Override public List<User> getAllUsers() { return userMapper.getAllUsers(); } } ``` 以上就是Spring Boot集成Sharding-JDBC的基本步骤,可以根据实际需求进行配置和调整。 ### 回答2: Sharding-JDBC是一个开源的基于JDBC分库分表中间件,它可以对表数据进行分库、分表、分片等操作,从而实现高并发和高扩展性等需求。Spring Boot是一个基于Spring框架的全栈式Java开发框架,它简化了应用程序的搭建和开发,提供了诸如自动配置、依赖管理和运行时应用程序监控等功能。 Spring Boot集成Sharding-JDBC的过程如下: 1.添加Sharding-JDBC的依赖:在pom.xml文件中添加Sharding-JDBC的依赖。 2.配置连接池:在application.properties或application.yml中配置数据源的连接信息与连接池信息。 3.配置分库分表规则:在application.properties或application.yml中配置Sharding-JDBC分库分表规则,可以通过多种方式配置。 4.编写Mapper和Service层代码:在Mapper和Service层中编写SQL语句以及对数据库进行操作的方法。 5.测试:编写测试代码对Sharding-JDBC进行测试,以确保其正确性和可用性。 以上就是Spring Boot集成Sharding-JDBC的过程,通过该过程可以实现高并发和高扩展性等需求,其具有简单易用和优秀的性能等特点,为企业级开发提供了一种高效、安全和可控的技术解决方案。 ### 回答3: 随着互联网技术的不断发展,越来越多的企业和项目需要使用分库分表技术来应对数据量的不断增大。而Sharding-JDBC是一个分库分表框架,它的出现给开发者提供了一种轻松便捷集成分库分表的方式。而Spring Boot则是一个非常流行的快速开发框架,它可以帮助开发者快速搭建应用程序。本文将介绍如何在Spring Boot中集成Sharding-JDBC。 第一步是引入相关依赖。在pom.xml文件中加入以下依赖: ``` <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>5.0.0-alpha</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ``` 第二步是配置Sharding-JDBC。我们要对分库分表进行配置,需要按照以下步骤进行: 1. 配置数据源(DataSources):我们需要配置每个数据库的JDBC连接信息。 2. 配置数据源(DataSourceRule):将多个数据源合并成一个虚拟数据源,给程序使用。 3. 配置分表策略(TableRule):为每个数据表设置分表策略,指定分表算法和分表键等信息。 4. 配置分库策略(DatabaseShardingStrategy):为每个分表设置分库策略,指定分库算法和分库键等信息。 5. 配置分表算法(ShardingAlgorithm):设置分表算法。 6. 配置分库算法(ShardingAlgorithm):设置分库算法。 以上步骤可以参考Sharding-JDBC的官方文档。 第三步是将Sharding-JDBC注入到Spring Boot中。我们需要在配置类(通常是application.yml或application.properties文件)中配置数据源和Sharding-JDBC的相关信息。 ``` spring: sharding: jdbc: # 配置数据源 dataSources: ds0: url: jdbc:mysql://localhost:3306/db0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8 username: root password: root ds1: url: jdbc:mysql://localhost:3306/db1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8 username: root password: root # 配置数据源规则 dataSourceRule: # 主从配置,选择哪个数据源(ds0 或 ds1) masterDataSourceName: ds0 slaveDataSourceNames: ds1 # 配置分片规则 shardingRule: # 配置分表规则 tableRules: - logicTable: t_order # 逻辑表名 actualDataNodes: ds${0..1}.t_order_${0..1} # 真实表名 tableStrategy: standard: shardingColumn: order_id shardingAlgorithmName: t_order_inline # 配置分库规则 databaseShardingStrategy: standard: shardingColumn: user_id shardingAlgorithmName: database_inline # 配置分片算法 shardingAlgorithms: t_order_inline: type: INLINE props: algorithm-expression: t_order_${order_id % 2} database_inline: type: INLINE props: algorithm-expression: ds${user_id % 2} ``` 最后,在需要使用的地方使用即可。比如在服务类中注入DataSource即可使用。 总之,Spring Boot集成Sharding-JDBC并不复杂,只需要按照上述步骤配置即可。如果还有不清楚的地方,可以查看Sharding-JDBC的官方文档。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值