九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表
文章目录
- 前言
- 一、引入依赖
- 二、创建一个light-db_1备用数据库
- 三、配置文件 application-dev.yml
- 四、创建shardingsphere-config.yml
- 完整项目结构
- 五、测试
- 总结
前言
在现代化微服务架构中,随着数据量的不断增长,单一数据库已难以满足高可用性、扩展性和性能要求。ShardingSphere 提供了分库分表的能力,帮助我们轻松实现水平拆分。本文将介绍如何在 Spring Boot 项目中,结合 MyBatis 和 Druid,实现分库分表的功能。
提示:以下是本篇文章正文内容,下面案例可供参考
一、引入依赖
在父项目中引入shardingsphere-jdbc依赖
dependencies {...implementation 'com.alibaba:druid-spring-boot-3-starter:1.2.24'implementation 'com.mysql:mysql-connector-j:9.2.0'implementation 'org.apache.shardingsphere:shardingsphere-jdbc:5.5.2'}
二、创建一个light-db_1备用数据库
创建一个light-db_1作为分库,表结构和light-db一模一样
三、配置文件 application-dev.yml
上篇文章介绍使用mybatis+druid的时候是直接在datasource下配置了数据库连接参数,这里我们将数据库配置文件放在单独的shardingsphere-config.yml专门进行分库分表的配置
spring:datasource:url: jdbc:shardingsphere:classpath:shardingsphere-config.ymldriver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriverdruid:initial-size: 5min-idle: 10max-active: 20validation-query: SELECT 1filters: stat,slf4j# 统计 SQL 执行情况stat:merge-sql: truelog-slow-sql: trueslow-sql-millis: 5000web-stat-filter:#不统计这些请求数据exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"#访问监控网页的登录用户名和密码stat-view-servlet:enabled: trueurl-pattern: /druid/*login-username: light-druidlogin-password: light-druid# MyBatis
mybatis:# 搜索指定包别名type-aliases-package: com.light.**.entity# 配置mapper的扫描,找到所有的mapper.xml映射文件mapper-locations: classpath*:mapper/**/*Mapper.xml# 加载全局的配置文件configLocation: classpath:mybatis-config.xmllogging:level:org.mybatis: debugcom.light.generator.mapper: debug
四、创建shardingsphere-config.yml
在该配置文件中配置分库分表,配置参数参考注释,完整的配置示例请参考官网ShardingSphere-JDBC配置说明
# ShardingSphere 配置模式,配置为 Standalone(独立模式)
mode:type: Standalonerepository:type: JDBC # 使用 JDBC 作为注册中心,支持通过数据库持久化配置# 配置多个数据源 ds_0 和 ds_1
dataSources:# 数据源 ds_0 配置ds_0:dataSourceClassName: com.alibaba.druid.pool.DruidDataSource # 使用 Druid 数据源连接池driverClassName: com.mysql.cj.jdbc.Driver # MySQL 驱动类url: jdbc:mysql://localhost:3306/light-db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false# 数据库连接 URL,配置了字符编码、时区、是否使用 SSLusername: root # 数据库用户名password: 123456 # 数据库密码# 数据源 ds_1 配置ds_1:dataSourceClassName: com.alibaba.druid.pool.DruidDataSource # 使用 Druid 数据源连接池driverClassName: com.mysql.cj.jdbc.Driver # MySQL 驱动类url: jdbc:mysql://localhost:3306/light-db_1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false# 数据库连接 URL,配置了字符编码、时区、是否使用 SSLusername: root # 数据库用户名password: 123456 # 数据库密码# ShardingSphere 的分片规则
rules:- !SHARDING # 启用分片规则tables:t_user:# 配置 t_user 表的分片规则actualDataNodes: ds_${0..1}.t_user # 定义表的实际数据节点,ds_0 和 ds_1 分别表示两个数据源databaseStrategy:standard:# 配置数据库的分片策略shardingColumn: id # 使用 id 列作为分片字段shardingAlgorithmName: database_inline # 使用 INLINE 算法进行分片keyGenerateStrategy:# 配置主键生成策略column: id # 主键列为 idkeyGeneratorName: snowflake # 使用 Snowflake 算法生成主键# 配置分库算法shardingAlgorithms:database_inline:type: INLINE # 使用 INLINE 算法props:algorithm-expression: ds_${id % 2} # 分库算法,根据 id 字段的值做取余运算,分配到 ds_0 或 ds_1 数据源# 配置主键生成算法keyGenerators:snowflake:type: SNOWFLAKE # 使用 Snowflake 算法生成全局唯一的 IDprops:worker-id: 123 # 配置 Snowflake 算法的工作机器 ID,用于生成唯一的 ID# 配置一些全局属性
props:sql-show: true # 是否显示 SQL 执行日志,设置为 true 时会在日志中输出 SQL
完整项目结构

五、测试
在此通过insertUser和getUserList进行测试,具体测试代码请参考我的前章节内容 八.springboot集成mybatis+druid数据库连接池
- 测试新增用户

- 测试查询

此时查看2个数据库中就能看到刚刚测试添加的数据了
总结
在这篇实践中,我们使用了 ShardingSphere 配合 MyBatis 和 Druid 实现了分库分表的功能。通过配置,我们定义了分库分表策略、数据源。结合 MyBatis,我们可以在服务层进行 CRUD 操作,轻松管理数据。
这种方式不仅提高了数据库的性能,还确保了数据的可扩展性,适用于大规模系统的构建。如果你有任何问题,欢迎在评论区留言。
ShardingSphere还有很多其他功能,比如数据加密、影子库、数据脱敏、读写分离等,具体说明请参考ShardingSphere官网介绍
相关文章:
九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表
文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中,随着数据量的不断增长,单一数据库已难以满足高可用性、扩展性和…...
【第2章:神经网络基础与实现——2.3 多层感知机(MLP)的构建与调优技巧】
在当今科技飞速发展的时代,人工智能早已不是一个陌生的词汇,它已经渗透到我们生活的方方面面,从智能语音助手到自动驾驶汽车,从图像识别到自然语言处理。而支撑这一切的核心技术之一,就是神经网络。作为机器学习领域的璀璨明星,神经网络已经在众多任务中取得了令人瞩目的…...
宠物企业宣传网站静态模板 – 前端静态页面开发实例
该宠物宣传企业站是一个基于前端技术构建的静态网站,旨在为宠物行业的企业提供一个简洁、现代的在线展示平台。整个网站采用HTML、CSS和JavaScript三种技术,确保了良好的用户体验和页面表现。 前端技术: HTML:HTML负责构建网站的…...
git如何下载指定版本
要使用Git下载指定版本,可以通过以下步骤进行操作: 1. 使用Git命令行下载指定版本: 1.1 首先,使用git clone命令克隆整个git库到本地。例如:git clone [库的URL]。这将下载最新的代码到本地。 1.2 进入克隆…...
【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)——4.2 LSTM的引入与解决长期依赖问题的方法】
在人工智能的璀璨星空中,深度学习模型犹如一颗颗耀眼的星辰,引领着技术的革新。而在处理序列数据的领域中,循环神经网络(RNN)无疑是那颗最为亮眼的星星。然而,即便是这样强大的模型,也面临着一些棘手的问题,其中最突出的便是长期依赖问题。今天,我们就来深入探讨一下长…...
IoTDB 集群节点 IP 改变,如何更新集群
问题 问题1:如果 IoTDB 配置的时候用的 IP,没有用 hostname,后面 IP 修改了,历史数据需要重新导吗? 问题2:如果现场运行 IoTDB 半年,电脑 IP 要改的话,半年的数据要导出来再导入么…...
C++ 设计模式-建造者模式
以下是一个完整的C建造者模式示例,包含产品类、建造者接口、具体建造者、指挥者以及测试代码: #include <iostream> #include <string> #include <memory>// 产品类:汽车 class Car { public:void setBody(const std::str…...
词袋模型和词嵌入模型区别和关联分析(词袋模型是否属于词嵌入模型)
词袋模型(Bag of Words, BoW)不属于词嵌入模型,它们是两种完全不同的文本表示方法。以下从多个维度对比二者的核心区别 1. 本质区别 特性词袋模型 (BoW)词嵌入模型 (Word Embedding)表示形式离散的稀疏向量(高维,维度…...
png、jpg、gif、webp的区别
png、jpg、gif、webp的区别 1.img的格式2.问题 1.img的格式 png 无损压缩,尺寸体积比jpg/jpeg大;适合做小图标jpg 采用了压缩算法,有一点失真,比png体积小;适合中大型图片gif 动态图webp 同时支持有损和无损压缩,相同质量的图片,webp具有更小的体积,但兼容性不太好(在某些浏览…...
el-input输入框样式修改
el-input输入框样式修改 目的:蓝色边框去掉、右下角黑色去掉(可能看不清楚) 之前我试过deep不行 最有效的办法就是就是在底部添加一下css文件 代码中针对input的type为textarea,对于非textarea,只需将下面的css样式中的textarea替换成input…...
什么是多光谱环形光源
多光谱环形光源是一种用于机器视觉、工业检测和科学研究的光源设备,能够提供多种波长的光,适用于不同材料和表面的检测需求。以下是其关键特点和应用: 关键特点 多光谱输出:可发射多种波长的光(如可见光、红外光、紫外…...
几款C#开发的入门书籍与视频教程
以下是几本适合C#初学者的书籍和一些优质的视频教程推荐,帮助你快速入门C#开发: 书籍推荐 1. 《C#入门经典》 • 作者:Karli Watson, Christian Nagel 等 • 特点:经典的C#入门书籍,内容全面,从基础语法到…...
日常问题-pnpm install执行没有node_modules生成
日常问题-pnpm install执行没有node_modules生成 1.问题2.解决方法 1.问题 执行pnpm i后,提示Scope: all 3 workspace projects Done in 503ms,而且没有node_modules生成。很奇怪 2.解决方法 确保根目录有 pnpm-workspace.yaml 文件: 把这…...
2025蓝桥杯JAVA编程题练习Day4
1.艺术与篮球 问题描述 小蓝出生在一个艺术与运动并重的家庭中。 妈妈是位书法家,她希望小蓝能通过练习书法,继承她的艺术天赋,并练就一手好字。爸爸是一名篮球教练,他希望小蓝能通过篮球锻炼身体,培养运动的激情和…...
C++-----------酒店客房管理系统
酒店客房管理系统 要求: 1.客房信息管理:包括客房的编号、类型、价格、状态等信息的录入和修改; 2.顾客信息管理:包括顾客的基本信息、预订信息等的管理; 3.客房预订:客户可以根据需要进行客房的预订,系统会自动判断客房的可用情况; 4.入住管理:客户入住…...
ORDER BY盲注攻击:原理、实现与防御(附Python多线程爆破脚本)
引言 在SQL注入攻击中,ORDER BY注入是一种容易被忽视但危害极大的漏洞类型。与传统的UNION或WHERE注入不同,ORDER BY参数通常无法直接返回查询结果,攻击者需要依赖**盲注(Blind SQLi)**技术逐字符提取数据。本文将结合…...
DeepSeek大模型响应速度优化策略
大模型响应速度的影响因素 响应速度受多方面因素影响,主要限制条件包括: (1)计算资源分配 每个query需要消耗约3.2TFLOPS算力集群使用英伟达H100 GPU,单卡理论峰值算力51TFLOPS实际部署中因动态负载均衡,一…...
人工智能在临床应用、药物研发以及患者护理等方面的最新研究进展|顶刊速递·25-02-12
小罗碎碎念 推文速览 第一篇文章提出 CRAFT-MD 框架评估临床大语言模型(LLMs)在医患互动任务中的表现,发现其存在局限性,并基于结果给出改进评估的建议。 第二篇文章全面阐述了 2019 年以来人工智能在小分子药物研发全流程&#…...
【物联网】电子电路基础知识
文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…...
辛格迪客户案例 | 钥准医药科技GMP文件管理(DMS)项目
01 创新药企,崛起于启东 在我国医药行业蓬勃发展的浪潮中,钥准医药科技(启东)有限公司(以下简称“钥准医药”)犹如一颗冉冉升起的新星,闪耀着创新与活力的光芒。成立于2015年,钥准医…...
FastAPI 高并发与性能优化
FastAPI 高并发与性能优化 目录 🚀 高并发应用设计原则🧑💻 异步 I/O 优化 Web 服务响应速度⏳ 在 FastAPI 中优化异步任务执行顺序🔒 高并发中的共享资源与线程安全问题 1. 🚀 高并发应用设计原则 在构建高并发应…...
V93K测试机
爱德万V9300(又称V93K)是Advantest公司推出的高端可扩展SoC测试平台,在半导体测试领域具有标杆地位。以下为该设备的详细介绍: ### 一、核心性能与技术优势 1. **高速高精度测试能力** V9300支持高达112 Gbps PAM4信号&…...
如何在OCP部署Java应用程序
初次接触OpenShift Container Platform (OCP) 确实可能会感到有些陌生。不用担心,OCP的设计目标之一就是简化应用的容器化部署和管理。下面一步一步地为您讲解如何将您已经开发好的Java程序部署到OCP上。 一、基本概念 1、基本概念 首先,我们先来了解…...
Day65_20250213图论part9_dijkstra(堆优化版)|Bellman_ford算法精讲
Day65_20250213图论part9_dijkstra(堆优化版)|Bellman_ford算法精讲 dijkstra(堆优化版) 题目 https://www.programmercarl.com/kamacoder/0047.%E5%8F%82%E4%BC%9Adijkstra%E5%A0%86.html 小明参加科学大会 思路 思路 朴素版的dijkstra,时间复杂度为O(n^2)&am…...
w208基于spring boot物流管理系统设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
MySQL、MariaDB 和 TDSQL 的区别
MySQL、MariaDB 和 TDSQL 是三种不同的数据库管理系统,它们在设计理念、功能、性能和使用场景上有一些显著的区别。 以下是对这三者的详细比较和介绍。 1. MySQL 概述 类型:关系型数据库管理系统(RDBMS)。开发者:最…...
望远镜成像系统--科学评价光学镜头
望远镜是一种利用透镜或反射镜以及其他光学器件观测遥远物体的光学仪器。其原理是通过透镜的折射或反射镜的反射,将光线聚焦成像,再经过一个放大目镜进行观察。日常生活中的光学望远镜又称“天文望远镜”。1608年,荷兰的一位眼镜商汉斯利伯希…...
“失意”的李彦宏
"百度AI出海的一路高歌,难掩李彦宏的“失意”。" 作者 | 李太白 编辑 | 卢旭成 2月11日,在迪拜举办的World Governments Summit 2025峰会上,阿联酋AI部长奥马尔苏丹奥拉马(Omar Sultan AI Olama)在与百度…...
产品更新 | 华望M-Design 平台的AI 建模功能即将上线
前言 在 AI 技术加速发展的背景下,杭州华望系统科技有限公司在⼤语⾔模型与 SysML 标准进行深度结合的基础上,强力推出AI建模功能。该功能⽀持⽤户通过上传⽂档或对话交互等⽅式完成需求智能增强、模型动态构建与细节补充、实时获取结构化反馈等业务。⽬…...
RabbitMQ 在 Spring Boot中使用方式
文章目录 作用MQ docker 安装MQ使用RabbitMQ的整体架构及核心概念:RabbitMQ的整体架构及核心概念:消费者消息推送限制交换机与队列## 项目使用MQDirect: 直连模式Fanout: 广播模式Topic: 主题模式Headers: 头信息模式 使用DEMO地址异常问题记录 作用 Ra…...
