springboot接入ShardingJDBC

ShardingJDBC 是 Apache ShardingSphere 的一个子项目,它是一个开源的分库分表中间件,提供了透明化的数据分片、分布式事务和数据库治理等功能。ShardingJDBC 以 JDBC Driver 的形式提供,支持任何基于 JDBC 的 ORM 框架、持久层框架和数据库连接池,具有高度兼容性。

1、添加依赖

<dependencies><!--    Mybatis    --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!--     Mybatis Plus    --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency><!-- MyBatis-Plus Generator --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.5</version></dependency><!-- MySQL JDBC 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!-- Druid 数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.20</version></dependency><!--shardingsphere--><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.2.1</version></dependency><!--    shardingsphere和2.2不兼容,需要使用1.33,但是1.33和springboot 3.2.2 不兼容,所以自定义了 TagInspectorUnTrustedTagInspector  --><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.33</version></dependency></dependencies>

主要是在 mysql、mybatis 等依赖的基础上,增加shardingsphere-jdbc-core-spring-boot-starter的依赖。

这里为了解决一个版本兼容问题,增加了一个snakeyaml的依赖,一般来说其实是不用的。

2、添加配置

spring:shardingsphere:mode:type: Standalonerepository:type: JDBCprops:sql-show: truedatasource:names: dsds:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://rm-bp101vuh0edt82wo0go.mysql.rds.aliyuncs.com:3306/nfturbousername: nfturbopassword: 'NFTurbo666'# Druid连接池配置datasource.druid:initial-size: 5 # 连接池初始化时创建的连接数。默认值为0。min-idle: 5 # 连接池中保持的最小空闲连接数量。当连接池中的连接数量小于这个值时,连接池会尝试创建新的连接。默认值为0。max-active: 20 # 连接池中允许的最大连接数。如果所有连接都被使用并且没有空闲连接,新的连接请求将被阻塞,直到有连接可用。默认值为8。max-wait: 60000 # 获取连接时的最大等待时间,单位为毫秒。如果在指定的时间内无法获取到连接,将抛出异常。默认值为-1,表示无限等待。time-between-eviction-runs-millis: 60000 # 连接池每次检测空闲连接的间隔时间,单位为毫秒。默认值为60000毫秒(1分钟)。min-evictable-idle-time-millis: 300000 # 连接在连接池中的最小空闲时间,超过这个时间的连接将被回收,单位为毫秒。默认值为300000毫秒(5分钟)。validation-query: SELECT 1 # 用于验证连接是否有效的SQL查询语句。Druid会定期执行此查询来检测连接的可用性。默认为"SELECT 1"。test-while-idle: true # 是否在连接空闲时检测连接的有效性。如果设置为true,则连接池会定期检测空闲连接,如果连接失效,将被标记为不可用并移除。默认为true。test-on-borrow: false # 是否在从连接池借用连接时检测连接的有效性。如果设置为true,每次从连接池借用连接时都会执行连接有效性检测。默认为false。test-on-return: false # 是否在归还连接到连接池时检测连接的有效性。如果设置为true,连接在归还到连接池时会进行有效性检测。默认为false。pool-prepared-statements: true # 是否开启预处理语句池。预处理语句池可以提高性能,特别是在执行相同SQL语句多次时。默认为true。max-pool-prepared-statement-per-connection-size: 20 #每个连接上允许的最大预处理语句数。默认值为20。rules:sharding:tables:trade_order:actual-data-nodes: ds.trade_order_0${0..3}keyGenerateStrategy:column: idkeyGeneratorName: snowflaketable-strategy:standard:shardingColumn: buyer_idshardingAlgorithmName: t-order-inlineshardingAlgorithms:t-order-inline:type: INLINEprops:algorithm-expression: trade_order_0${Math.abs(buyer_id.hashCode()) % 4}keyGenerators:snowflake:type: SNOWFLAKEauditors:sharding_key_required_auditor:type: DML_SHARDING_CONDITIONS    

以上是一个简单的 demo,主要是 sharding 下面的这些配置是我们需要关注的,主要就是关于分库分表的一致基本配置:

spring.shardingsphere:整体的配置的前缀

spring.shardingsphere.mode:运行模式,支持 memory、standalone 和 cluster 几种,我们用的是比较简单的standalone 这种配置

spring.shardingsphere.props.sql-show:配置为 ture 会把执行的 SQL 打印出来,方便排查问题

spring.shardingsphere.datasource:这就是数据源的配置了,所谓数据源就是你的数据库

spring.shardingsphere.rules.sharding:这部分就是关于分表的一些配置了。

spring.shardingsphere.rules.sharding.tables:这部分开始配置分表信息,每一个需要做分库分表的表都需要单独配置一套

spring.shardingsphere.rules.sharding.tables.trade_order:表示是trade_order表的分库分表相关的配置

trade_order:# 定义 'trade_order' 表的分片配置# 指定用于分片的实际数据节点。# 这里 'ds.trade_order_000${0..3}' 表示数据将分布在四个节点上:ds.trade_order_0000、ds.trade_order_0001、ds.trade_order_0002 和 ds.trade_order_0003。actual-data-nodes: ds.trade_order_000${0..3}# 定义主键生成策略keyGenerateStrategy:# 指定用于生成主键的列column: id# 指定使用的主键生成器名称,这里使用的是 Snowflake 算法keyGeneratorName: snowflake# 定义表的分片策略table-strategy:# 使用复杂分片策略complex:# 指定用于分片的列,这里使用 buyer_idshardingColumns: buyer_id# 指定使用的分片算法名称,这里使用的是 t-order-inline 算法shardingAlgorithmName: t-order-inline

spring.shardingsphere.rules.sharding.tables.shardingAlgorithms:是分表算法相关的配置

shardingAlgorithms:# 定义一个名为 t-order-inline 的分片算法t-order-inline:# 指定算法类型为 INLINEtype: INLINEprops:# 定义分片表达式,根据 buyer_id 的哈希值进行分片algorithm-expression: trade_order_0${Math.abs(buyer_id.hashCode()) % 4}# 这个表达式将 buyer_id 的哈希值取模 4,以确定记录分配到哪个数据节点(trade_order_0000 到 trade_order_0003)

3、完成配置

按照以上方式,基本上就完成了 shardingjdbc 的接入,后续就可以进行数据库操作了。

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

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

相关文章

Dify平台搭建面试机器人

无代码搭建面试机器人 什么是Dify 什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员&#xff0c;也能…

Django创建一个非前后端分离平台

1.pub_blog前端创立 1.blog/pub路由 注意两个路由的区别 2.完善页面 用表单实现 3.加载wangeditor的几个文件 4.配置样式 5.配置js代码&#xff0c;单独放在js文件夹中&#xff0c;js文件夹pub_blog onload事件&#xff0c;加载完成后会再加载 5.提交按钮

什么情况下索引会失效

一、索引创建的原则 1、针对数据量较大&#xff0c;且查询比较频繁的表建立索引。 单表超过10万数据&#xff0c;即可增加索引 2、使用经常作为查询条件&#xff08;where&#xff09;、排序&#xff08;order by&#xff09;、分组&#xff08;group by&#xff09;操作的字…

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施&#xff0c;通过技术架构革新与功能模块整合&#xff0c;重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系&#xff0c;将分散的创作、存储、审核及分发环节纳入统一平台管理。基…

用deepseek学大模型04-模型可视化与数据可视化

deepseek.com: pytorch可视化工具 生成神经网络图 在 PyTorch 中&#xff0c;可视化神经网络结构的常用工具和方法有以下几种&#xff0c;以下将详细介绍它们的用法&#xff1a; 1. TensorBoard (PyTorch 官方集成) PyTorch 通过 torch.utils.tensorboard 支持 TensorBoard&a…

JavaScript设计模式 -- 外观模式

在实际开发中&#xff0c;往往会遇到多个子系统协同工作时&#xff0c;直接操作各个子系统不仅接口繁琐&#xff0c;还容易导致客户端与内部实现紧密耦合。**外观模式&#xff08;Facade Pattern&#xff09;**通过为多个子系统提供一个统一的高层接口&#xff0c;将复杂性隐藏…

【性能测试】如何理解“10个线程且10次循环“的请求和“100线程且1次循环“的请求

在性能测试中&#xff0c;我们常常会见到不同的并发配置&#xff1a;比如“10个线程且10次循环”与“100线程且1次循环”。乍一看&#xff0c;这两个设置的总请求数都是100次&#xff0c;但它们对系统的压力和测试场景却截然不同。了解其中的区别&#xff0c;能帮助你更精准地模…

Spring Boot 实战:轻松实现文件上传与下载功能

目录 一、引言 二、Spring Boot 文件上传基础 &#xff08;一&#xff09;依赖引入 &#xff08;二&#xff09;配置文件设置 &#xff08;三&#xff09;文件上传接口编写 &#xff08;一&#xff09;文件类型限制 &#xff08;二&#xff09;文件大小验证 &#xff0…

【Golang】GC探秘/写屏障是什么?

之前写了 一篇【Golang】内存管理 &#xff0c;有了很多的阅读量&#xff0c;那么我就接着分享一下Golang的GC相关的学习。 由于Golang的GC机制一直在持续迭代&#xff0c;本文叙述的主要是Go1.9版本及以后的GC机制&#xff0c;该版本中Golang引入了 混合写屏障大幅度地优化了S…

DeepSeek教unity------MessagePack-03

数据契约兼容性 你可以使用 [DataContract] 注解代替 [MessagePackObject]。如果类型用 DataContract 进行注解&#xff0c;可以使用 [DataMember] 注解代替 [Key]&#xff0c;并使用 [IgnoreDataMember] 代替 [IgnoreMember]。 然后&#xff0c;[DataMember(Order int)] 的…

【对比】Pandas 和 Polars 的区别

Pandas vs Polars 对比表 特性PandasPolars开发语言Python&#xff08;Cython 实现核心部分&#xff09;Rust&#xff08;高性能系统编程语言&#xff09;性能较慢&#xff0c;尤其在大数据集上&#xff08;内存占用高&#xff0c;计算效率低&#xff09;极快&#xff0c;利用…

百度千帆平台对接DeepSeek官方文档

目录 第一步&#xff1a;注册账号&#xff0c;开通千帆服务 第二步&#xff1a;创建应用&#xff0c;获取调用秘钥 第三步&#xff1a;调用模型&#xff0c;开启AI对话 方式一&#xff1a;通过API直接调用 方式二&#xff1a;使用SDK快速调用 方式三&#xff1a;在千帆大模…

49. c++计时器

为了测试某段特定代码的执行时间&#xff0c;体现代码的性能&#xff0c;可以使用计时器对代码段计时。下面使用std::chrono中的api编写简单案例&#xff1a; // // main.cpp // HelloWorld // // Created by on 2024/11/28. //#include <iostream> #include <vec…

Natural Language Processing NLP

NLP 清晰版本查看 Sentence segmentation (split)Tokenisation (split)Named entity recognition (combine) 概念主要內容典型方法Distributional Semantics&#xff08;分佈式語義&#xff09;&#xff08;分銷語義&#xff08;分佈式語義&#xff09;單詞的語義來自於它的…

Linux中线程创建,线程退出,线程接合

线程的简单了解 之前我们了解过 task_struct 是用于描述进程的核心数据结构。它包含了一个进程的所有重要信息&#xff0c;并且在进程的生命周期内保持更新。我们想要获取进程相关信息往往从这里得到。 在Linux中&#xff0c;线程的实现方式与进程类似&#xff0c;每个线程都…

HarmonyOS:使用List实现分组列表(包含粘性标题)

一、支持分组列表 在列表中支持数据的分组展示&#xff0c;可以使列表显示结构清晰&#xff0c;查找方便&#xff0c;从而提高使用效率。分组列表在实际应用中十分常见&#xff0c;如下图所示联系人列表。 联系人分组列表 在List组件中使用ListItemGroup对项目进行分组&#…

django上传文件

1、settings.py配置 # 静态文件配置 STATIC_URL /static/ STATICFILES_DIRS [BASE_DIR /static, ]上传文件 # 定义一个视图函数&#xff0c;该函数接收一个 request 参数 from django.shortcuts import render # 必备引入 import json from django.views.decorators.http i…

【前端知识】浏览器兼容方案polyfill

浏览器兼容方案polyfill 什么是 Polyfill&#xff1f;Polyfill 的作用Polyfill 的工作原理1. **特性检测**2. **加载 Polyfill**3. **模拟实现** Polyfill 的常见场景Polyfill 的使用方式Polyfill 的优缺点优点缺点 常见的 Polyfill 库总结 什么是 Polyfill&#xff1f; Polyf…

C#学习之DateTime 类

目录 一、DateTime 类的常用方法和属性的汇总表格 二、常用方法程序示例 1. 获取当前本地时间 2. 获取当前 UTC 时间 3. 格式化日期和时间 4. 获取特定部分的时间 5. 获取时间戳 6. 获取时区信息 三、总结 一、DateTime 类的常用方法和属性的汇总表格 在 C# 中&#x…

dedecms 开放重定向漏洞(附脚本)(CVE-2024-57241)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…