使用SpringBoot集成Shardingjdbc介绍、应用场景和示例代码

概述

Spring Boot集成Sharding JDBC可以帮助实现MySQL数据库的分库分表操作,使得应用能够轻松处理大规模数据和高并发场景。Sharding JDBC通过透明的分库分表策略,将数据分布到多个数据库实例和数据表中,从而提高数据库的扩展性和性能。

应用场景

  1. 大数据量应用:当单一数据库已经无法满足应用的存储需求或者读写压力时,可以通过分库分表来分散数据,减轻单库压力。

  2. 高并发访问:通过分库分表,可以将数据分散存储,提高数据库读写的并发能力,从而提升系统整体的吞吐量。

  3. 数据隔离需求:根据业务需要,将不同的业务数据存储在不同的数据库实例或者不同的表中,实现数据的隔离和管理。

  4. 业务扩展:在多租户系统或者分布式系统中,通过分库分表来支持不同业务的独立扩展和管理。

使用示例

1. 引入依赖

在Spring Boot项目的pom.xml文件中引入Sharding JDBC的相关依赖:

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>5.0.0</version> <!-- 请根据最新版本调整 -->
</dependency>
2. 配置数据源

application.propertiesapplication.yml中配置数据源信息和Sharding JDBC的规则配置:

spring:datasource:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/${dbname}?useSSL=false&serverTimezone=UTCshardingsphere:datasource:names: ds0, ds1  # 定义两个数据源,即两个数据库实例rules:sharding:tables:user:actualDataNodes: ds${0..1}.user_${0..1}  # user表分布在ds0.user_0, ds0.user_1, ds1.user_0, ds1.user_1四个表中tableStrategy:standard:shardingColumn: user_idpreciseAlgorithmClassName: com.example.algorithm.PreciseModuloShardingTableAlgorithmprops:sql:show: true
3. 自定义分库分表策略

可以通过实现PreciseShardingAlgorithmTableShardingAlgorithm接口来定义分库分表的规则,例如:

package com.example.algorithm;import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import java.util.Collection;public class PreciseModuloShardingTableAlgorithm implements PreciseShardingAlgorithm<Long> {@Overridepublic String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {for (String tableName : availableTargetNames) {if (tableName.endsWith(shardingValue.getValue() % availableTargetNames.size() + "")) {return tableName;}}throw new UnsupportedOperationException();}
}
4. 使用分库分表

在应用中正常操作数据即可,Sharding JDBC会根据配置的规则自动路由数据到正确的数据库实例和表中。

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long userId) {return userMapper.selectByPrimaryKey(userId);}public void createUser(User user) {userMapper.insert(user);}public void updateUser(User user) {userMapper.updateByPrimaryKey(user);}public void deleteUser(Long userId) {userMapper.deleteByPrimaryKey(userId);}
}

通过以上步骤,可以在Spring Boot应用中成功集成Sharding JDBC,并实现MySQL数据库的分库分表操作,适用于大规模数据和高并发访问的应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axure制作切换栏--动态面板的应用

先看下效果&#xff1a;点击上面的切换栏 切换到西游记栏目&#xff1a; 切换到水浒传栏目&#xff1a; 上述两个图片比对可以发现&#xff0c;在点击切换栏的时候&#xff0c;里面的内容以及切换栏的下面蓝色横线也会发生对应的变化。这里涉及到两个地方的变化&#xff0c;就…

Golang 知识结构图

总结Go的入门知识结构&#xff0c;如下图所示&#xff1a;

关于map的内存和时间复杂度内存占用

关于map的内存和时间复杂度&#xff08;map尽量别碰暴力遍历&#xff09; 内存占用&#xff1a; map中每个元素包含一个键和一个值。键和值的类型可以是任意可比较的数据类型。 内存占用取决于键和值的大小以及map中元素的数量。 对于固定大小的键和值类型&#xff0c;map的内…

图形/视图结构的三个坐标系

图形/视图结构的三个坐标系分别为视图结构系物理结构系&#xff0c;场景坐标系&#xff0c;图形项坐标系。 本文记录实践三个坐标系及视图与场景坐标转换&#xff0c;通过事件槽来显示出来的过程。 自定义1个View视图组件&#xff0c;其中扩展了鼠标点击、鼠标移动的事件&…

详细介绍仿函数

仿函数&#xff08;Functor&#xff09;是C中的一种可调用对象&#xff08;Callable Object&#xff09;&#xff0c;也是一种重载了函数调用运算符&#xff08;operator()&#xff09;的类或结构体。 仿函数可以像函数一样被调用&#xff0c;可以带参数&#xff0c;可以返回值…

Golang | Leetcode Golang题解之第297题二叉树的序列化与反序列化

题目&#xff1a; 题解&#xff1a; type Codec struct{}func Constructor() (_ Codec) {return }func (c Codec) serialize(root *TreeNode) string {if root nil {return "X"}left : "(" c.serialize(root.Left) ")"right : "("…

路由学习属于OSI模型的哪一层

路由学习主要发生在OSI&#xff08;开放系统互连&#xff09;模型的第三层&#xff0c;即网络层。在OSI模型中&#xff0c;每一层都有其特定的功能和责任&#xff0c;而网络层的主要职责是管理网络中的数据通信&#xff0c;包括数据包的转发和路由选择。 具体来说&#xff0c;…

前端渲染模式

渲染的概念 在Web开发中&#xff0c;渲染&#xff08;Rendering&#xff09;是一个核心概念&#xff0c;指的是将应用程序的数据&#xff08;data&#xff09;与模板&#xff08;template&#xff09;结合&#xff0c;生成最终的HTML页面&#xff0c;这个页面随后会被浏览器解析…

主宰生物进化的 “魔咒” —— 制约生物在特殊环境下进化方式的线索

一些神秘的法则制约着生物在特殊环境下的进化方式。它们还为动物将如何适应气候变暖提供了线索。 一些奇特的进化现象 一艘装满大象和老鼠的 “诺亚方舟” 搁浅在一座偏远的小岛上。动物们都幸存下来并繁衍后代。但是&#xff0c;随着世代相传&#xff0c;奇怪的事情发生了&a…

【基础篇】Docker 概览 ONE

嗨&#xff0c;大家好&#xff01;我是小竹笋&#xff0c;一名热爱创作的工程师。今天我将带领大家一起踏上探索 Docker 的奇妙之旅。我们先从 Docker 的历史和发展说起&#xff0c;然后再看看 Docker 和虚拟机之间的区别&#xff0c;最后了解一下 Docker 在各行各业的应用情况…

环境配置—批量删除时提示/usr/bin/rm: Argument list too long问题

文章目录 1. 背景介绍2. 问题原因3. 解决方案3.1 分批删除文件3.2 使用 find 命令直接删除3.3 增加系统参数限制3.4 使用循环删除 4. 结论 1. 背景介绍 在Linux系统中&#xff0c;rm 命令是删除文件和目录的常用工具。然而&#xff0c;当需要删除大量文件时&#xff0c;可能会…

python脚本,识别pdf数据,转换成表格形式

可以使用Python库来识别PDF文件并将其转换为表格形式。下面是一个示例脚本&#xff0c;使用了tabula-py库来进行PDF数据提取和转换操作。 首先&#xff0c;安装tabula-py库。可以使用以下命令来安装&#xff1a; pip install tabula-py然后&#xff0c;使用以下代码来实现PDF…

【论文10】复现代码tips

一、准备工作 1.创建一个虚拟环境 conda create --name drgcnn38 python=3.8.18 2.激活虚拟环境 conda activate drgcnn38 注意事项 在Pycharm中终端(terminal)显示PS而不是虚拟环境base 问题如下所示 解决方法:shell路径改成cmd.exe 重启终端显示虚拟环境 3.安装torch …

Dav_笔记11:SQL Tuning Overview-sql调优 之 3

自动SQL调整功能 由于手动SQL调优过程给应用程序开发人员带来了许多挑战&#xff0c;因此Oracle调优过程已通过Oracle数据库的自动SQL调优功能实现自动化。这些功能旨在同样适用于OLTP和数据仓库类型的应用程序&#xff1a; ■ADDM ■SQL Tuning Advisor ■SQL调整集 ■SQ…

vue Ref 和 Reactive 原理解析

文章目录 RefReactive Ref ref 的语义是指向一个值的引用&#xff0c;主要用于处理基本数据类型和单一值对象&#xff0c;即对值的引用进行包装和管理&#xff0c;而不是对对象的操作进行拦截&#xff0c;对于基础类型通过 getter 和 setter 实现拦截使用 Proxy 拦截对象的所有…

Kafka知识总结(事务+数据存储+请求模型+常见场景)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 事务 事务Producer保证消息写入分区的原子性&#xff0c;即这批消…

flask和python,navicat实现数据库和python的结合

app.py import pymysql from flask import Flask, render_template, requestapp Flask(__name__)app.route(/add/user, methods["GET", "POST"]) def add_user():if request.method "GET":return render_template(add_user.html) # 修正模板…

C语言 ——— 指针和字符数组的相关笔试题和解析(上篇)

目录 字符数组和指针的笔试题&#xff08;sizeof篇&#xff09; 字符数组和指针的笔试题&#xff08;strlen篇&#xff09; 字符数组和指针的笔试题&#xff08;sizeof篇&#xff09; 1. char arr[] { a, b, c, d, e, f }; printf("%d\n", sizeof(arr)); 首先要…

国内本地化OCSP服务的SSL证书:提升安全与效率的新选择

在数字化时代&#xff0c;网络安全成为企业运营和用户体验的重要基石。HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;作为一种安全的网络协议&#xff0c;通过SSL&#xff08;Secure Sockets Layer&#xff09;加密技术&#xff0c;保障了数据传输的机密性…

Windows 端口占用 Port 端口占用 如何发现端口占用并且强杀?

应用场景 场景 有时候本地测试&#xff0c;经常发现端口占用。 如何找到端口占用&#xff0c;并且 kill 掉呢&#xff1f; 端口占用情况 lsof -i:XXX查看 sudo netstat -apn | grep XXX查看 ps -aux | grep XXX详细信息 ps -ef | grep XXX根据分类条件查询信息 发现并…