当前位置: 首页 > news >正文

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.lqws.cn/news/589789.html

相关文章:

  • 华为云Flexus+DeepSeek征文 | ​​华为云ModelArts Studio大模型与企业AI会议纪要场景的对接方案
  • 具身智能环境的构建和工作(具身智能入门四)
  • Oracle 进阶语法实战:从多维分析到数据清洗的深度应用​(第四课)
  • 贪心算法在C++中的应用与实践
  • Monorepo+Pnpm+Turborepo
  • 数据结构:链表
  • 认识 Spring AI
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的Dify 快速构建联网搜索助手
  • Zookeeper安装使用教程
  • 产品背景知识——API、SDK、Library、Framework、Protocol
  • guava限流器RateLimiter源码详解
  • SpringBoot -- 自动配置原理
  • 基于Python的GIS-RS多源数据处理(TIF/SHP/NC/...)【20250630】
  • P1967 [NOIP 2013 提高组] 货车运输
  • Spring生态:云原生与AI的革新突破
  • C++ 快速回顾(五)
  • 编程新手之环境搭建:node python
  • Excel转pdf实现动态数据绑定
  • 「Java案例」计算矩形面积
  • Linux随记(十九)
  • python+uniapp基于微信小程序的食堂菜品查询系统
  • [springboot系列] 探秘JUnit 5: Java单元测试利器
  • Spring 依赖注入:官方推荐方式及最佳实践
  • hono+postgresql+CURD
  • YOLOv13:最新的YOLO目标检测算法
  • Windows11系统中安装docker并配置docker镜像到pycharm中
  • 文旅数字孪生交付生态链:集成-交付-运维“三位一体”,100+案例助力行业数字化转型
  • 腾讯云空间,高性能显卡云,安装xinference报错,pip install 空间不够用了
  • WOLA(Weighted Overlap-Add)方法详解
  • 实战避坑:MyBatis中${}拼接如何优雅又安全?