shardingsphere5.2.1與SpringBoot3.X的版本沖突問題

1.先說一下我的版本配置與遇到的問題

?問題產生的依賴和版本:
主要依賴依賴版本
jdk17
SpringBoot?3.3.13
shardingsphere-jdbc?5.2.1


問題產生的原因:

主要就是shardingsphere-jdbc 與SpringBoot版本沖突,因為Spring Boot 需要 SnakeYAML 庫來解析 YAML 配置文件

  • Spring Boot 3.x 默認使用 SnakeYAML 2.x(新 API)

  • ShardingSphere 5.2.1 依賴 SnakeYAML 1.x(舊 API)


問題解決的方法:
1.升級ShardingSphere的版本

升級版本讓ShardingSphere支持SnakeYAML 2.x(新 API)

截止2025年6月30日,ShardingSphere官方文檔的最新版本是5.5.1

從5.2.1版本以后,ShardingSphere-jdbc的導入就發生了變化

5.2.1以前是(包括5.2.1)

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>${latest.release.version}</version>
</dependency>

5.2.1以后是

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core</artifactId><version>${latest.release.version}</version>
</dependency>

就連yaml配置也有了一些改變,官方文檔說的很不明白,我是沒看懂到底怎么配置的(鄙人小白,勿噴)

我也沒弄明白哪一個高版本是支持SnakeYAML 2.x(新 API)

同時我也沒搞懂高版本的yaml如何配置,所以我采取了第二種方法,如下 ↓?


2.降低SpringBoot的版本至2.X

Spring Boot 3.x 默認使用 SnakeYAML 2.x(新 API)

Spring Boot 2.x 默認使用 SnakeYAML 1.x(舊?API)

最后我把SpringBoot的版本降為了2.7.6,jdk的也修改為了jdk8

我沒用過jdk11,不過只要和SpringBoot版本兼容應該沒有問題。


2. (修改后的)我的所有配置

先看yaml配置:


server:port: 8080spring:application:name: shardingJdbcshardingsphere:datasource:names: ds0,ds1ds0:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/szml_demo0?serverTimezone=UTCusername: rootpassword: ******ds1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/szml_demo1?serverTimezone=UTCusername: rootpassword: ******rules:sharding:key-generators:snowflake:type: SNOWFLAKEprops:worker-id: 666sharding-algorithms:database-inline:type: INLINEprops:algorithm-expression: ds$->{(user_id % 100 / 10).intValue() % 2}table-inline:type: INLINEprops:algorithm-expression: users$->{user_id % 2 + 1}tables:users:actual-data-nodes: ds$->{0..1}.users$->{1..2}database-strategy:standard:sharding-column: user_idsharding-algorithm-name: database-inlinetable-strategy:standard:sharding-column: user_idsharding-algorithm-name: table-inlinekey-generate-strategy:column: user_idkey-generator-name: snowflakeprops:sql-show: trueoutput:ansi:enabled: ALWAYS
logging:level:org.springframework.web: debug

我是分了兩個庫,每一個庫又分了兩張表

我寫的時候忘給yaml加注解了,不過大家可以去官網參考一下

https://shardingsphere.apache.org/document/5.2.1/cn/user-manual/shardingsphere-jdbc/yaml-config/


我的pom文件中引入的依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.wmb</groupId><artifactId>shardingJdbc</artifactId><version>0.0.1-SNAPSHOT</version><name>shardingJdbc</name><description>shardingJdbc</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>2.3.1</version><scope>test</scope></dependency><!-- shardingJDBC核?依賴 --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.2.1</version><exclusions><exclusion><artifactId>snakeyaml</artifactId><groupId>org.yaml</groupId></exclusion></exclusions></dependency><!-- 版本沖突 --><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.33</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.21</version></dependency></dependencies><build><plugins>
<!--            <plugin>-->
<!--                <groupId>org.apache.maven.plugins</groupId>-->
<!--                <artifactId>maven-compiler-plugin</artifactId>-->
<!--                <configuration>-->
<!--                    <annotationProcessorPaths>-->
<!--                        <path>-->
<!--                            <groupId>org.projectlombok</groupId>-->
<!--                            <artifactId>lombok</artifactId>-->
<!--                        </path>-->
<!--                    </annotationProcessorPaths>-->
<!--                </configuration>-->
<!--            </plugin>--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

我也學過mybatis-plus,確實好用,但是沒真的用過,只是學過,推薦大家都學習一下,嘿嘿~


接下來嘗試ShardingSphereseata結合使用

到這里的結束了,下面的都不用看了~ ~ ~


下面都是項目中最基本的一個類和一個測試以及一個mapper,來驗證分庫分表的成功執行:

sql表,每一個庫兩張表(users1和users2):

CREATE TABLE users (user_id BIGINT PRIMARY KEY,username VARCHAR(50),password VARCHAR(255),email VARCHAR(100),phone VARCHAR(20),gmt_create TIMESTAMP
);

?實體類User:

public class User {private Long uerId;private String username;private String password;private String email;private String phone;private LocalDateTime gmtCreate;
}

插入語句:?

因為創建的 users? 表,這里寫users即可,表的后綴不用謝,這里報錯是正常的,不用管,能跑就行,我也沒有深究這里的表名具體怎么寫才不會報錯,有懂的 佬 可以評論一下給我答疑解惑。

還有一件事,如果使用mybatis-plus,直接繼承,這里就不用寫了

@Insert("insert into users (username,password,email,phone,gmt_create) " +"values (#{username},#{password},#{email},#{phone},#{gmtCreate})" )Integer insert(User user);

測試方法:

@SpringBootTest
public class UserInsertTest {@Autowiredprivate UserMapper userMapper;@Testpublic void insertUser() {for(int i = 0; i < 10; i++){User user = new User();user.setUsername("user_" + i);user.setPassword("123456_" + i);user.setEmail("email_" + i);user.setPhone("phone_" + i);user.setGmtCreate(LocalDateTime.now());userMapper.insert(user);System.out.println(user);}}
}

最后運行方法驗證一下,是不是把插入的數據分到兩個數據庫中的四張表。

我想,下面的這些你也一定看了吧

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89224.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA控制88E1512 PHY芯片完成網絡通信

一、88E1512分析 本文不對88E1512進行詳細解析&#xff0c;僅對調試過程中重點使用的幾個寄存器進行說明。 1.1 MDIO時序分析 根據手冊&#xff0c;MDIO時序中&#xff0c;mdc時鐘最高為12Mhz。占空比和建立保持時間要求可以觀察上述表格。 MDIO的讀數據時序圖如下&#xff1a…

Ai大模型 - ocr圖像識別形成結構化數據(pp-ocr+nlp結合) 以及訓練微調實現方案(初稿)

全局目錄,一步到位 功能流程第一階段 基于現有條件進行 調研,測試與評估1.1 ocr深度學習模型 pp-ocr1.2 nlp結構化模型1.3 硬件要求: 第二階段 模型訓練微調2.1 更換ocr-GPU模型, 下載相關環境2.2 nlp模型 語義訓練2.3 最低硬件要求:2.4 樣本數據: (重點)2.5 進一步增強模型能力…

【Linux】軟硬鏈接,動靜態庫

目錄 一、認識一下常用指令 1、建立一個軟鏈接 2、建立一個硬鏈接 3、刪除文件的第二種方式&#xff1a;刪除鏈接unlink指令 二、什么是硬鏈接&#xff1f; 三、軟硬鏈接的原理&#xff1a; 四、應用場景 1、建立一個軟鏈接可以快速在一個比較深的路徑中找到目標文件進行…

VRR(可變刷新率)和QMS(快速媒體切換)

&#x1f527; 一、技術原理的本質區別 技術VRR (可變刷新率)QMS (快速媒體切換)核心目標消除動態幀率波動導致的畫面撕裂/卡頓消除靜態幀率切換時的黑屏中斷工作機制實時調整顯示器刷新率&#xff08;Hz&#xff09;匹配GPU輸出幀率&#xff08;FPS&#xff09;→ 動態延長/縮…

GO 語言學習 之 Map

map 是 Go 語言中非常重要的數據結構&#xff0c;常用于需要快速查找、統計或分組數據的場景。 map定義&#xff1a; package mainimport "fmt"func main() {var m1 map[int]string // 創建一個 mapm2 : make(map[int]string) // 創建一個 map m3…

什么是可觀測性?監控、日志、追蹤三者之間有什么區別?

一、引言&#xff1a;為什么現代系統需要“看得見”&#xff1f; 你是否遇到過這樣的情況&#xff1a;系統運行突然變慢&#xff0c;但沒人知道問題出在哪&#xff1f;隨著微服務、云原生架構的普及&#xff0c;系統的復雜度越來越高&#xff0c;傳統的“靠經驗判斷”已經無法…

扣子(coze)實戰|自動搬運+改寫+歸檔!自媒體矩陣終極方案

今天給大家分享的是用coze做一個工作流來自動提取抖音/小紅書視頻文案及改寫并傳入到飛書多維表格&#xff0c;我們先來看案例 上傳視頻鏈接即可一鍵生成&#xff0c;廢話不多說&#xff0c;上教程~ 一、整體工作流如下&#xff1a; 二、開發思路&#xff1a; 三、詳細工作流分…

K8s環境下基于Nginx WebDAV與TLS/SSL的文件上傳下載部署指南

#作者&#xff1a;閆乾苓 文章目錄 1.問題及背景2.方案說明3.部署步驟3.1 制作TLS/SSL私有證書3.2 創建訪問nginx賬戶密碼文件并創建secret3.3 為TLS/SSL私有證書創建secret3.4 為Nginx 配置文件創建confimap3.5 使用deployment&#xff0c;svc部署nginx3.6 客戶端curl上傳下載…

【Day 7-N17】Python函數(1)——函數定義、位置參數調用函數、關鍵字參數調用函數、函數的默認值

挑戰14天學會Python&#xff0c;第7天學習筆記&#xff01;加油&#xff01; 一、概述 函數&#xff08;Function&#xff09;是 Python 中用于封裝可重用代碼塊的基本結構。通過定義函數&#xff0c;我們可以將復雜邏輯拆分為更小、更易管理的單元&#xff0c;并通過參數傳遞…

STM32 驅動 ADS1015 單端 差分 多通道模式 ADC 轉換

文章目錄 一、ADS1015簡介二、引腳功能三、寄存器介紹1.Conversion Register 轉化數據存放寄存器2.Config Register 配置寄存器 四、IIC時序1.寫寄存器2.讀寄存器 五、程序六、實驗現象1.單端模式2.差分模式3.偽多通道模式 一、ADS1015簡介 ADS1015 是一款由德州儀器&#xff…

RabbitMQ 消費冪等性與消息重放實現

一、冪等性實現 1.1 什么是冪等性&#xff1f; 冪等性是指同一條消息無論被消費多少次&#xff0c;業務結果都只生效一次&#xff0c;防止重復扣款、重復發貨等問題。 RabbitMQ 的投遞模式是“至少一次交付”(at-least-once delivery)&#xff0c;如果消費者處理失敗或者沒有及…

【HarmonyOS 5】鴻蒙TEE(可信執行環境)詳解

【HarmonyOS 5】鴻蒙TEE&#xff08;可信執行環境&#xff09;詳解 一、TEE是什么&#xff1f; 1、TEE的定義&#xff1a; 可信執行環境&#xff08;Trusted Execution Environment&#xff09;&#xff0c;簡稱TEE&#xff0c;是存在于智能手機、平板或任意移動設備主處理器…

算法: 冒泡排序

冒泡排序是一種簡單的排序算法&#xff0c;通過相鄰元素的比較和交換&#xff0c;使較大的元素逐漸"浮"到數組末尾。 時間復雜度:最佳 O(n) | 平均 O(n) | 最差 O(n) 空間復雜度:O(1) 穩定性:穩定 應用場景/前提條件 適用于小規模數據對幾乎已排序的數據效率較高…

基于SpringBoot的家電銷售展示平臺

源碼編號&#xff1a;S567 源碼名稱&#xff1a;基于SpringBoot的家電銷售展示平臺 用戶類型&#xff1a;雙角色&#xff0c;用戶、管理員 數據庫表數量&#xff1a;14 張表 主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 運行環境&#xff1a;Windows/M…

java+vue+SpringBoo智慧旅游系統(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔&#xff08;1萬字以上&#xff09;開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot數據庫&#xff1a;mysql 開發工具 JDK版本&#xff1a;JDK1.…

Docker 入門教程(三):鏡像操作命令

文章目錄 &#x1f433; Docker 入門教程&#xff08;三&#xff09;&#xff1a;鏡像操作命令獲取鏡像&#xff1a;docker pull查看鏡像&#xff1a;docker images刪除鏡像&#xff1a;docker rmi搜索鏡像&#xff1a;docker search鏡像打標簽&#xff1a;docker tag鏡像詳情與…

如何修改discuz文章標題字數限制 修改成255

在 Discuz! X3.5 中&#xff0c;文章&#xff08;主題&#xff09;標題字數的限制可以通過修改數據庫結構以及后臺配置來實現&#xff0c;以下是完整的修改方法&#xff0c;將標題長度限制改為 255 個字符&#xff1a; ? 一、修改數據庫字段長度 Discuz 默認標題字段是 subje…

基于BP神經網絡的26個英文字母識別

本課題旨在設計并實現一個基于BP&#xff08;反向傳播&#xff09;神經網絡的英文字母識別系統&#xff0c;實現對手寫或打印的26個英文字母&#xff08;A-Z&#xff09;的自動分類識別。項目首先對字母圖像進行預處理&#xff08;如灰度化、歸一化、二值化和特征提取&#xff…

系統架構設計師論文分享-論云原生技術的應用

我的軟考歷程 摘要 2023年2月&#xff0c;我所在的公司做了開發紗線MES系統的決定&#xff0c;該系統為國內紗線工廠提供SAAS服務&#xff0c;旨在提高紗線工廠的智能化和數字化水平。我在該項目中被任命為系統架構設計師&#xff0c;全面掌管該項目的架構設計工作。該項目涉…

重置 MySQL root 密碼

引言 在linux可能存在安裝mysql安裝失敗&#xff0c;一直不出現默認密碼 /usr/local/mysql/mysql-8.0.26/bin/mysqld --defaults-file/etc/my.cnf --usermysql --basedir/usr/local/mysql/mysql-8.0.26 --datadir/usr/local/mysql/mysql-8.0.26/data --lower-case-table-name…