当前位置: 首页 > news >正文

与 Spring Boot 的无缝集成:ShardingSphere 快速集成实践

ShardingSphere 是一个轻量级的开源分布式数据库中间件,它支持分库分表、分布式事务、读写分离等功能。它能够与各种应用框架进行集成,其中与 Spring Boot 的集成非常流行,因为它能够帮助开发者在 Spring Boot 项目中快速实现高性能的分布式数据库管理。

本文将介绍如何通过 ShardingSphere 与 Spring Boot 快速集成,实现分库分表、读写分离等功能。


一、ShardingSphere 简介

ShardingSphere 是一个支持分布式数据库中间件功能的开源项目,提供以下几个关键特性:

  • 分库分表:通过数据库的水平切分,进行数据的分布式存储。
  • 读写分离:支持数据库的读写分离,提高数据库性能。
  • 分布式事务:提供两阶段提交协议(2PC)和 XA 事务支持,保证跨数据库的事务一致性。
  • 数据加密与安全:支持数据库数据加密,保障数据安全。
  • 灵活的数据库路由与执行引擎:支持动态路由和SQL解析。

ShardingSphere 与 Spring Boot 的集成能够简化分布式数据库的使用,同时提供灵活的配置和高效的性能。


二、ShardingSphere 与 Spring Boot 集成的步骤

1. 环境准备

首先,我们需要一个 Spring Boot 项目,并确保已安装以下组件:

  • Spring Boot:用于构建后端应用程序。
  • ShardingSphere-JDBC:这是 ShardingSphere 的 JDBC 模块,负责与数据库进行交互。
  • Spring Data JPA / MyBatis:根据需要集成 JPA 或 MyBatis 来访问数据库。
  • 数据库:可以使用 MySQL、PostgreSQL 或其他关系型数据库。
2. 创建 Spring Boot 项目

使用 Spring Initializr 创建一个 Spring Boot 项目,选择所需的依赖项,例如:

  • Spring Web
  • Spring Data JPA 或 MyBatis(根据需求)
  • H2 或 MySQL(数据库)

你可以使用 Spring Initializr 的官网来创建项目。

3. 添加 ShardingSphere 依赖

pom.xml 中添加 ShardingSphere-JDBC 依赖。

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL JDBC Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- ShardingSphere-JDBC dependency --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0</version> <!-- 使用对应的 ShardingSphere 版本 --></dependency>
</dependencies>
4. 配置数据源和 ShardingSphere

ShardingSphere 的配置主要通过 application.ymlapplication.properties 来实现。以下是一个典型的配置示例,配置了 分库分表读写分离 功能。

spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedruid:# 主库配置master:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/your_master_db?serverTimezone=UTCusername: rootpassword: rootmax-active: 20min-idle: 5# 从库配置slave:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3307/your_slave_db?serverTimezone=UTCusername: rootpassword: rootmax-active: 20min-idle: 5shardingsphere:datasource:names: master,slavemaster:url: jdbc:mysql://localhost:3306/your_master_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverslave:url: jdbc:mysql://localhost:3307/your_slave_dbusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver# 配置 ShardingSphere 的分库分表策略sharding:tables:order:actual-data-nodes: ds${0..1}.order_${0..1}table-strategy:inline:sharding-column: order_idalgorithm-expression: order_${order_id % 2}# 配置读写分离readwrite-splitting:data-source-name: masterstatic:- name: masterwrite: true- name: slavewrite: falseread: true

在上面的配置中:

  • 数据源配置:配置了主库 master 和从库 slave,实现读写分离。
  • 分库分表配置:为 order 表配置了一个简单的分片策略,按照 order_id 进行分库分表。
  • 读写分离配置:配置了主库为写库,从库为读库。
5. 配置 ShardingSphere 代理

在 Spring Boot 配置中,我们可以设置 ShardingSphere 的 DataSource 和路由规则,通过 ShardingSphere 提供的 Spring Boot Starter 自动集成。ShardingSphere 会自动从配置文件读取相关信息并创建分片数据源。

application.yml 中配置完数据源和 ShardingSphere 后,Spring Boot 会自动注入 ShardingSphere 数据源。

6. 编写实体类和数据库访问层

在 Spring Boot 项目中,可以使用 JPA 或 MyBatis 来访问数据库。在 entity 类中,定义相应的字段和表结构。以下是一个简单的 JPA 实体类:

@Entity
public class Order {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long orderId;private String orderName;// Getter and Setter methods
}

通过 Spring Data JPA,创建 OrderRepository

public interface OrderRepository extends JpaRepository<Order, Long> {List<Order> findByOrderName(String orderName);
}
7. 启动 Spring Boot 应用

确保 ShardingSphere 的配置正确,然后启动 Spring Boot 应用:

mvn spring-boot:run

在应用启动后,Spring Boot 将自动创建数据源并进行分库分表操作。


三、测试与验证

在集成完成后,可以通过编写测试来验证分库分表和读写分离是否正常工作。例如,创建一些订单并查看其是否被正确路由到不同的数据库。

测试案例:
@SpringBootTest
public class ShardingSphereTest {@Autowiredprivate OrderRepository orderRepository;@Testpublic void testCreateOrder() {Order order = new Order();order.setOrderName("Test Order");orderRepository.save(order);}@Testpublic void testReadOrders() {List<Order> orders = orderRepository.findByOrderName("Test Order");orders.forEach(order -> System.out.println(order.getOrderId()));}
}

四、总结

通过 ShardingSphere 与 Spring Boot 的无缝集成,我们可以在 Spring Boot 应用中轻松实现分库分表、读写分离等功能。ShardingSphere 提供了强大的分布式数据库中间件能力,能够帮助开发者在不修改业务代码的情况下,灵活地扩展数据库系统,同时保持高可用性和高性能。以上的集成步骤展示了如何快速启动一个 ShardingSphere 集成的 Spring Boot 项目,你可以根据自己的需求进行自定义配置和优化。

相关文章:

与 Spring Boot 的无缝集成:ShardingSphere 快速集成实践

ShardingSphere 是一个轻量级的开源分布式数据库中间件&#xff0c;它支持分库分表、分布式事务、读写分离等功能。它能够与各种应用框架进行集成&#xff0c;其中与 Spring Boot 的集成非常流行&#xff0c;因为它能够帮助开发者在 Spring Boot 项目中快速实现高性能的分布式数…...

【QT】窗口/界面置于最前端显示,且激活该窗口

目录 0.环境 1.问题描述 2.具体实现 0.环境 windows11 qt 1.问题描述 我有一个窗口QMainWindow&#xff08;也适用于QWidget或QDialog&#xff09;&#xff0c;想让其在显示的时候置于最前面&#xff0c;且激活成为当前活动窗口 2.具体实现 mainWindow->show();mainWind…...

DOL-288 多功能电子计时器说明书

新买一个计时器&#xff0c;它的用法不太直观&#xff0c;所以把说明书留在这里&#xff0c;以便以后查询。 DOL-288 多功能电子计时器说明书 1.功能说明&#xff1a; 正计时功能&#xff0c;计时上限为23小时59分59秒倒计时功能&#xff0c;计时上限为23小时59分59秒&#…...

14 常用的负载均衡算法

基于nginx的代理 1. 轮询算法 例如我们在nginx服务器中代理了3台服务器&#xff0c;再每次客户端发起请求的时候按照顺序请求挨次的发送到代理的三台服务器上。该算法比较适合每台服务器性能差不多的场景&#xff0c;如果部分服务器性能比较差&#xff0c;可能会造成性能好的…...

方法建议ChatGPT提示词分享

方法建议 ChatGPT能够根据您的具体需求提供针对性的建议&#xff0c;帮助您选择最合适的研究方法。通过清晰的提示&#xff0c;ChatGPT可以精准地为您提供最契合的研究方案。此外&#xff0c;它还能协助您将这些方法灵活地应用于新的研究环境&#xff0c;提出创新的技术解决方案…...

如何提高自动化测试覆盖率和效率

用ChatGPT做软件测试 在现代软件开发中&#xff0c;自动化测试已经成为保证软件质量的重要手段。然而&#xff0c;在实践中&#xff0c;自动化测试的覆盖率和效率常常受到限制&#xff0c;导致潜在缺陷未能及时发现或测试资源浪费。因此&#xff0c;提升自动化测试的覆盖率和效…...

Django学习笔记(安装和环境配置)-01

Django学习笔记(安装和环境配置)-01 一、创建python环境 1、可以通过安装Anaconda来创建一个python环境 # 创建一个虚拟python环境 conda create -n django python3.8 # 切换激活到创建的环境中 activate django2、安装django # 进入虚拟环境中安装django框架 pip install …...

【PHP】部署和发布PHP网站到IIS服务器

欢迎来到《小5讲堂》 这是《PHP》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言安装PHP 稳定版本线程安全版解压使用 PHP配置 配置文件扩展文件…...

渗透测试之SSRF漏洞原理 危害 产生的原因 探测手法 防御手法 绕过手法 限制的手段

目录 SSRF说明: SSRF攻击流程 原理&#xff1a; 危害: SSRF产生的原因 ssrf漏洞利用{危害} 探测手法是否存在SSRF漏洞 如何找ssrf漏洞位置 分享连接地址 google hack url关键字 PHP语言中可能出现的ssrf漏洞函数 file_get_contents sockopen() curl_exec() SSRF…...

微信小程序-base64加解密

思路&#xff1a;先创建一个base64.js的文件&#xff0c;这个文件可以作为专门加解密的文件模块&#xff0c;需要时就引用&#xff1b;创建好后&#xff0c;引用base64.js里的加解密函数。 注意&#xff1a;引用模块一定要引用正确的路径&#xff0c;否则会报错。 base64.js:…...

Linux shell 批量验证端口连通性

脚本 #!/bin/bash # #database check #set -o nounset LOCALIPifconfig | grep inet | head -1 | awk {print $2} | sed s/addr\:// IPLIST192.168.1.99 192.168.1.98 192.168.1.97 PORTLIST81 82 83 84 85 86 check_nc(){ for CHECK_IP in $IPLIST dofor CHECK_PORT in $PORT…...

2025-1-21 Newstar CTF web week1 wp

文章目录 week1headach3会赢吗智械危机 week1 headach3 根据提示&#xff0c;在页面的请求头里找到flag flag{You_Ar3_R3Ally_A_9ooD_d0ctor} 会赢吗 打开控制台&#xff0c;拿到第一部分flag 将地址栏改为提示&#xff0c;去到下一关 控制台调用函数&#xff0c;得到flag …...

【系统架构】如何设计一个秒杀系统?

目录 1. 什么是秒杀&#xff1f; 2. 秒杀系统的特点 3. 如何设计秒杀系统&#xff1f; 3.1 前端秒杀设计 3.2 后端秒杀设计 4. 如何保证不超卖&#xff1f; 4.1 库存扣减方式 4.2 服务端库存处理 5. 总结 * 知识扩展&#xff1a;什么是CDN&#xff1f; 1. 什么是秒杀…...

C++模拟实现queue

C模拟实现queue 1.queue的基本概念2.queue的基本框架3.size()成员函数4.empty()成员函数5.push()成员函数6.pop()成员函数7.front()成员函数8.back()成员函数9.完整代码 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x…...

【2025小年源码免费送】

&#x1f496;学习知识需费心&#xff0c; &#x1f4d5;整理归纳更费神。 &#x1f389;源码免费人人喜&#xff0c; &#x1f525;码农福利等你领&#xff01; &#x1f496;山高路远坑又深&#xff0c; &#x1f4d5;大军纵横任驰奔&#xff0c; &#x1f389;谁敢横刀立马行…...

PyQt5 超详细入门级教程上篇

PyQt5 超详细入门级教程 上篇&#xff1a;1-3部分&#xff1a;PyQt5基础与常用控件 第1部分&#xff1a;初识 PyQt5 和安装 1.1 什么是 PyQt5&#xff1f; PyQt5 是 Python 的图形用户界面 (GUI) 框架&#xff0c;它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架&#xff0c;用…...

qiankun+vite+vue3

基座与子应用代码示例 本示例中,基座为Vue3,子应用也是Vue3,由于qiankun不支持Vite构建的项目,这里还要引入 vite-plugin-qiankun 插件 基座(主应用) 加载qiankun依赖 npm i qiankun -S qiankun配置(src/qiankun) src/qiankun/config.ts export default {subApp…...

【数据结构】顺序队列与链式队列

顺序队列与链式队列 1.队列的基本概念1.顺序存储的队列&#xff1a;循环队列3.链式存储的队列&#xff1a;链式队列 1.队列的基本概念 队列是一种逻辑结构&#xff0c;是一种特殊的线性表 只能在固定的两端操作线性表 只要满足上述条件&#xff0c;那么这种特殊的线性表就会…...

Cursor的详细使用指南

以下是一份关于 Cursor 的详细使用指南&#xff1a; 一、安装与设置 下载与安装&#xff1a; 首先&#xff0c;访问 Cursor 的官方网站&#xff0c;根据你的操作系统&#xff08;Windows、Mac 或 Linux&#xff09;下载相应的安装程序。运行安装程序&#xff0c;按照屏幕上的提…...

2025美赛数学建模B题思路+模型+代码+论文

2025美赛数学建模A题B题C题D题E题思路模型代码&#xff08;1.24第一时间更新&#xff0c;更新见文末名片&#xff09; 论文数学建模感想 纪念逝去的大学数学建模&#xff1a;两次校赛&#xff0c;两次国赛&#xff0c;两次美赛&#xff0c;一次电工杯。从大一下学期组队到现在…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...