ShardingSphere+JPA+Druid实现分表操作

springboot+shardingsphere+druid 实现基于时间的水平分表 使用shardingsphere基于时间字段的动态水平分片。 阅读详情

要在SpringBoot项目中实现分表操作,本文使用的是ShardingSphere+JPA+Druid实现。过程中出现问题记录一下。

  1. 准备MySQL数据库表
    这里准备的是一张主表test_cost,两张从表test_cost_0和test_cost_1,结构需要相同,主表只是声明了表结构,供后端框架提供映射关系,不存储数据,从表是真正存储数据的表。
    在这里插入图片描述
  2. 引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>
<!-- Spring Boot Starter Test -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.6.0</version>
    <scope>test</scope>
</dependency>
<!-- ShardingSphere -->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
    <version>5.2.0</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-crypto</artifactId>
    <version>5.7.8</version> 
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.18</version>
</dependency>
<!-- Druid数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>
  1. 配置文件
server:
  port: 8080

spring:
  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        dialect: org.hibernate.dialect.MySQL5Dialect
        show_sql: true
        ddl-auto: create-drop
  shardingsphere:
    datasource:
      names: books # 数据库名称
      books:
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
        username: root
        password: 980828
    rules:
      sharding:
        sharding-algorithms: #分片算法配置
          table-inline:
            type: INLINE
            props:
              algorithm-expression: test_cost_$->{ id % 2 }
        key-generators: #主键生成策略
          snowflake:
            type: SNOWFLAKE
            props:
              worker-id: 1
        tables: #分表策略
          test_cost: # 主表名称
            actual-data-nodes: books.test_cost_$->{0..1}
            table-strategy:
              standard:
                sharding-column: id
                sharding-algorithm-name: table-inline
    props:
      sql-show: true

这里的分片算法是根据id字段能否被2整除来分,分到两张从表中。

  1. Repository
@Repository
public interface TestRepository extends JpaRepository<TestEntity, Long> {
}
  1. 实体类
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "test_cost")
public class TestEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private String gender;
    private String country;
    private BigDecimal cost;

}

在配置文件中配置了主键生成策略和分片算法,此处@GeneratedValue不能选IDENTITY,要选AUTO,由jpa自动选择。@Table的值为主表的表名。

  1. 遇见问题
    项目启动失败,出现了下图所示的异常:
    在这里插入图片描述
    从sharding官网的FAQ中发现如下解释:
    在这里插入图片描述

解决方案有两个:

  • 去掉druid-spring-boot-starter,直接使用druid-xxx.jar来替代,这就不会出现两个数据源冲突的问题
  • 仍然使用druid-spring-boot-starter,但是在springboot的启动类上exclude掉DruidDataSourceAutoConfigure这个类,忽略druid连接池的默认数据源配置(@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class}))

这里采用的是第二种方式:

@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
public class SpringbootRedisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootRedisApplication.class, args);
    }

}
  1. 启动项目,报错:java.sql.SQLException: url not set
    在这里插入图片描述
    原因是配置文件的数据源处的数据库URL的键应为“url”而不是“jdbc-url”!!!(3中提供的是正确的配置)
    在这里插入图片描述
    改成url后,重新启动,运行正常。

  2. 运行结果
    在这里插入图片描述
    在这里插入图片描述
    成功按照分片算法插入到对应的分表中。

Springboot Jpa分库分表项目实现过程详解 这篇文章主要介绍了springboot jpa分库分表项目实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 分库分表场景 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 分库分表用于应对当前互联网常见的两个场景——大数据量和高并发 阅读详情

相关推荐

sharding+druid 读写分离

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。 ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它与NoSQL和

很努力的恺恺 1584

SpringBoot+Sharding-JDBC分库分表实战

<p><img src="https://10.idqqimg.com/qqke_course_info/ajNVdqHZLLDicQjFHRT60aN5OCgE4Jo181twdpHVox5TYTFUFibIiaIkk6PlwqgwD9icRAictlbLkOQw/" alt="" /></p>

Sharding-JDBC 分库分表实战 springboot+sharding-jdbc+jpa+druid

分库分表前言

shouhuhuise的专栏 2409

ShardingSphere-JDBC整合druid配置数据源

ShardingSphere-jdbc整合druid开启监控

zwjzone的博客 1万+

ShardingSphere-JDBC分库分表实战与性能优化

分库分表是解决数据库水平扩展的核心技术,通过将数据分散到多个物理节点实现读写负载均衡。其实现原理主要依赖SQL解析、路由分发和结果归并三大引擎,其中分片算法设计直接影响查询性能。作为轻量级JDBC增强驱动,ShardingSphere-JDBC凭借对MyBatis/Hibernate等ORM框架的无缝兼容,成为处理千万级数据表的首选方案,特别适用于电商订单、物流跟踪等高并发场景。通过inline表达式配置分片键与算法,开发者可以快速实现水平分片,配合HikariCP连接池还能有效避免广播查询导致的连接耗尽问

weixin_34416649的博客 433

JAVA:Spring Boot3 集成 ShardingSphere 实现数据分库分表

本文介绍了基于Spring Boot和ShardingSphere-JDBC实现分库分表与读写分离的解决方案。针对高并发、大数据量场景下单库单表的性能瓶颈,通过配置ShardingSphere-JDBC实现:1)订单表按user_id和order_id分片到两个库和两张表;2)读写分离,写操作路由至主库,读操作在从库间负载均衡。方案使用Druid连接池优化,支持业务透明,无需修改SQL。

木头 661

SpringBoot2.0.4+Jpa+ShardingSphere3.0.0.M2进行数据库分表

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。 分表执行的5个步骤: 1.Sql解析 分表的表达式:o...

qq_27127145的博客 3370

基于Multisim的智能交通灯控制系统仿真与实现(含动态闪烁功能)

本文详细介绍了基于Multisim的智能交通灯控制系统仿真与实现,重点解析了动态闪烁功能的电路设计。通过555定时器、74LS192计数器和JK触发器等核心模块,实现了主干道与支干道的交替通行及黄灯1Hz闪烁功能,为交通灯控制系统设计提供了完整的仿真方案。

weixin_29174013的博客 426

【SpringBoot框架篇】30.使用sharding-jdbc实现读写分离和分库分表

ShardingSphere-JDBC 提供了 4 种配置方式,用于不同的使用场景。 通过配置,应用开发者可以灵活的使用数据分片、读写分离、数据加密、影子库等功能,并且能够叠加使用。

皓亮君的博客 2376

深入GSConv代码:逐行解析这个混合了标准卷积与深度可分离卷积的‘新算子’

本文深入解析GSConv代码,详细介绍了这个混合标准卷积与深度可分离卷积的‘新算子’的设计哲学与实现框架。通过PyTorch代码逐行分析,揭示GSConv如何在轻量级卷积神经网络中平衡计算效率与特征表达能力,特别适用于Slim-Neck架构,显著降低计算量同时保持高精度。

weixin_29860267的博客 321

深入解析i2cdetect:从基础命令到高级读写操作

本文深入解析Linux下i2cdetect工具,从基础安装、总线扫描到高级读写操作。作为i2c-tools的核心组件,i2cdetect是硬件调试的得力侦探,能快速识别I2C总线上的设备地址。文章还涵盖了i2cdump、i2cset、i2cget等进阶工具,并介绍了如何在C程序中调用读写接口进行嵌入式开发,是掌握I2C通信调试的实用指南。

weixin_29189987的博客 372

springboot整合shardingjdbc分库分表+mybatisplus+druid

文章目录前言一、shardingjdbc是什么?二、使用步骤1.引入库2.编写配置文件编写datasourceConfig这里我没分库,上面配置文件改改就行了,这里主要是讲怎么整合druid和mybatisplus然后启动类上加上注解3.配置好了就可以编写业务进行测试总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、shardi

爱音乐的程序猿的博客 2004

FreeRTOS任务调度实战:如何让STM32同时处理温湿度采集、OLED显示和云端通信

本文通过一个基于STM32的物联网终端项目,详细讲解了如何利用FreeRTOS实现多任务调度,同时处理温湿度采集、OLED显示和云端通信。文章深入探讨了任务规划、堆栈分配、信号量与消息队列等核心机制,并重点优化了ESP8266通信任务的非阻塞设计与稳定性,为构建响应迅速、运行可靠的嵌入式系统提供了实战指南。

weixin_29188043的博客 331

ShardingSphere学习笔记

ShardingSphere 1.官网 ShardingSphere (apache.org) 2.定位 ​ a.是一套开源的分布式数据库解决方案 ​ b.组成JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成 ​ c.是一个分布式关系型数据库中间件(轻量级java框架),用于在分布式环境下操作数据库 3.三个产品介绍 3.1ShardingSphere-JDBC 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用

qq_40850266的博客 1640

通讯软件019——分分钟学会Prosys OPC UA Server配置

本文介绍如何配置Prosys OPC UA Simulation Server,通过本文可以对OPC UA的基本概念有所了解,掌握OPC UA的本质。

zhouwl72的博客 4302

安装Codex时出现无法下载此应用和Microsoft Store初始化失败的解决方案

本文主要介绍了安装Codex时出现无法下载此应用和Microsoft Store初始化失败的解决方案,希望能对使用codex的同学们有所帮助。 文章目录 1. 问题描述 2. Windows 解决方案 3. Mac解决方案

weixin_43178406的博客 7万+

基于mybatis和druid 连接池的shardingJdbc分库分表实战

Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。Apache ShardingSphere 设计哲学为 Database Plus,旨在构建异构数据库上层的标准和生态。它关注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。它站在数据库的上层视角,关注它们之间的协作多于数据库自身。

KEELON的博客 2191

Unity 面试篇|(六)数据结构和算法篇 【全面总结 | 持续更新】

先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样遍历完后,堆中的10000个数就是所需的最大的10000个。桶排序是计数排序的升级版。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。这样处理就可以分别在每个文件的10^6个数据中找出最大的10000个数,合并到一起在再找出1000*10000中的最终的结果。

游戏开发小Y的博客 12万+

个人学习系列 - Spring Boot + ShardingSphere + JPA 实现读写分离

最近想要学习一下分库分表,可是分库分表之前可以先用数据库的读写分离来过渡一下,当然这还需要主从服务器来配合。今天就先写数据库的读写分离,以后再介绍主从服务器。。。 Mysql 1. 新建三个数据库 CREATE DATABASE database0; USE database0; DROP TABLE IF EXISTS `user`; CREATE TABLE `user`( id bigint(64) not null auto_increment, city varchar(20) not n.

xiuaiba的博客 1159

高可用架构设计——多节点OpenClaw集群部署与负载均衡(2026企业级)

本文介绍了企业级OpenClaw高可用集群架构设计,重点阐述了多节点部署与负载均衡方案。架构采用分层设计,包括表现层、应用层、数据层和基础设施层,确保99.99%的可用性目标。详细配置了主节点、工作节点和存储节点规格,提供Kubernetes集群部署脚本示例,实现自动化的容器编排管理。通过硬件冗余、故障隔离和弹性扩展等可靠性原则,构建能够应对各种故障场景的稳定AI助手系统。

博客 421

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

sharding-JDBC分库分表配置分析

什么是ShardingSphere Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的基于数据库作为存储节点的增量功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。 详细资料点击官网地址. 分库分表解决什么问题 为什么要分库分表? 分库分表就是为了解决由于数据量(比如电商的订单)过大而导致数据库性能(CPU、内存、磁盘、网络)降低的问题,将原本单个数据库拆

养歌的博客 4433

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

springboot 2.x 整合 shardingsphere 5-分表【单数据源-实战】

springboot 2.x 整合 shardingsphere 5-分表【单数据源-实战】

qq_23916389的博客 781

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

springboot+shardingsphere温故而知新

前面也分析过springboot集成shardingsphere组件实现分库分表。分库分表主要解决海量数据引起的IO问题、查询慢等问题。 ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 3 款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能。 1、ShardingSphere-JDBC:定位为轻量级 Java 框架,在 Java 的 JDBC 层提供额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额

ldcaws的专栏 4107

在业务系统中使用 ShardingSphere 的方式有哪些?

但在日常开发过程中,如果我们使用了 Spring 和 Spring Boot 开发框架,一般都不会直接使用原生的 JDBC 接口来操作数据库,而是通过集成常见的 ORM 框架来实现这一点。从上面所介绍的配置信息中,你实际上已经看到了 ShardingSphere 中集成的两款主流开发框架,即 Spring 和 Spring Boot,它们都对 JDBC 规范做了封装。开源框架本身也是一个开发框架,但我们通常不会自己设计和实现一个全新的开发框架,而是更倾向于与现有的主流开发框架进行集成。

2301_79404691的博客 938

Apache ShardingSphere 实现分库分表及读写分离

浏览器请求: http://localhost:8080/sharding/saveUser。9.创建对应数据库:userdb , userdb2 , 并分别执行以下脚本。需要库、表提前手动创建,即只实现表的路由,不会自动创建表。查看日志:可以看到sql 执行的逻辑过程如下。3. 创建 mapper 类。6. 创建分库分表的配置文件。7. 读写分离的配置文件。

u013028240的专栏 923

ShardingSphere -03- ShardingSphere-JDBC(水平分表,水平分库,垂直分库,公共表,读写分离)

ShardingSphere-JDBC 简单介绍  定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。  Sharding-JDBC的核心功能为数据分片和读写分离,通过Sharding-JDBC,应用可以透明的使用jdbc访问已经分库分表、读写分离的多个数据源,而不用关心数据源的数量以及数据如何分布。   Sharding-JDBC的

迷雾总会解 415
上一篇: 使用Nacos搭建集群并过Nginx反向代理实现负载均衡步骤
下一篇: JPA使用CriteriaQuery实现动态分组查询
Dame'Seven
博客等级 码龄8年 21粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dame'Seven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值