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.pswp.cn/web/70054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70054.shtml
英文地址,請注明出處:http://en.pswp.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…