与 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.yml 或 application.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 是一个轻量级的开源分布式数据库中间件,它支持分库分表、分布式事务、读写分离等功能。它能够与各种应用框架进行集成,其中与 Spring Boot 的集成非常流行,因为它能够帮助开发者在 Spring Boot 项目中快速实现高性能的分布式数…...
【QT】窗口/界面置于最前端显示,且激活该窗口
目录 0.环境 1.问题描述 2.具体实现 0.环境 windows11 qt 1.问题描述 我有一个窗口QMainWindow(也适用于QWidget或QDialog),想让其在显示的时候置于最前面,且激活成为当前活动窗口 2.具体实现 mainWindow->show();mainWind…...
DOL-288 多功能电子计时器说明书
新买一个计时器,它的用法不太直观,所以把说明书留在这里,以便以后查询。 DOL-288 多功能电子计时器说明书 1.功能说明: 正计时功能,计时上限为23小时59分59秒倒计时功能,计时上限为23小时59分59秒&#…...
14 常用的负载均衡算法
基于nginx的代理 1. 轮询算法 例如我们在nginx服务器中代理了3台服务器,再每次客户端发起请求的时候按照顺序请求挨次的发送到代理的三台服务器上。该算法比较适合每台服务器性能差不多的场景,如果部分服务器性能比较差,可能会造成性能好的…...
方法建议ChatGPT提示词分享
方法建议 ChatGPT能够根据您的具体需求提供针对性的建议,帮助您选择最合适的研究方法。通过清晰的提示,ChatGPT可以精准地为您提供最契合的研究方案。此外,它还能协助您将这些方法灵活地应用于新的研究环境,提出创新的技术解决方案…...
如何提高自动化测试覆盖率和效率
用ChatGPT做软件测试 在现代软件开发中,自动化测试已经成为保证软件质量的重要手段。然而,在实践中,自动化测试的覆盖率和效率常常受到限制,导致潜在缺陷未能及时发现或测试资源浪费。因此,提升自动化测试的覆盖率和效…...
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》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言安装PHP 稳定版本线程安全版解压使用 PHP配置 配置文件扩展文件…...
渗透测试之SSRF漏洞原理 危害 产生的原因 探测手法 防御手法 绕过手法 限制的手段
目录 SSRF说明: SSRF攻击流程 原理: 危害: SSRF产生的原因 ssrf漏洞利用{危害} 探测手法是否存在SSRF漏洞 如何找ssrf漏洞位置 分享连接地址 google hack url关键字 PHP语言中可能出现的ssrf漏洞函数 file_get_contents sockopen() curl_exec() SSRF…...
微信小程序-base64加解密
思路:先创建一个base64.js的文件,这个文件可以作为专门加解密的文件模块,需要时就引用;创建好后,引用base64.js里的加解密函数。 注意:引用模块一定要引用正确的路径,否则会报错。 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 根据提示,在页面的请求头里找到flag flag{You_Ar3_R3Ally_A_9ooD_d0ctor} 会赢吗 打开控制台,拿到第一部分flag 将地址栏改为提示,去到下一关 控制台调用函数,得到flag …...
【系统架构】如何设计一个秒杀系统?
目录 1. 什么是秒杀? 2. 秒杀系统的特点 3. 如何设计秒杀系统? 3.1 前端秒杀设计 3.2 后端秒杀设计 4. 如何保证不超卖? 4.1 库存扣减方式 4.2 服务端库存处理 5. 总结 * 知识扩展:什么是CDN? 1. 什么是秒杀…...
C++模拟实现queue
C模拟实现queue 1.queue的基本概念2.queue的基本框架3.size()成员函数4.empty()成员函数5.push()成员函数6.pop()成员函数7.front()成员函数8.back()成员函数9.完整代码 🌟🌟hello,各位读者大大们你们好呀🌟🌟 &#x…...
【2025小年源码免费送】
💖学习知识需费心, 📕整理归纳更费神。 🎉源码免费人人喜, 🔥码农福利等你领! 💖山高路远坑又深, 📕大军纵横任驰奔, 🎉谁敢横刀立马行…...
PyQt5 超详细入门级教程上篇
PyQt5 超详细入门级教程 上篇:1-3部分:PyQt5基础与常用控件 第1部分:初识 PyQt5 和安装 1.1 什么是 PyQt5? PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架,用…...
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.顺序存储的队列:循环队列3.链式存储的队列:链式队列 1.队列的基本概念 队列是一种逻辑结构,是一种特殊的线性表 只能在固定的两端操作线性表 只要满足上述条件,那么这种特殊的线性表就会…...
Cursor的详细使用指南
以下是一份关于 Cursor 的详细使用指南: 一、安装与设置 下载与安装: 首先,访问 Cursor 的官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载相应的安装程序。运行安装程序,按照屏幕上的提…...
2025美赛数学建模B题思路+模型+代码+论文
2025美赛数学建模A题B题C题D题E题思路模型代码(1.24第一时间更新,更新见文末名片) 论文数学建模感想 纪念逝去的大学数学建模:两次校赛,两次国赛,两次美赛,一次电工杯。从大一下学期组队到现在…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
