SpringBoot3.2集成ShardingSphere-JDBC5.4.1遇snakeyaml构造方法缺失问题
org.yaml.snakeyaml.representer.Representer无参构造方法找不到的解决方案 问题原因
SpringBoot3.2默认引入的snakeyaml版本为2.0+,该版本移除了org.yaml.snakeyaml.representer.Representer的无参构造方法;而shardingsphere-jdbc-core5.4.1依赖低版本snakeyaml,代码中仍在调用这个已被移除的无参构造,导致NoSuchMethodError。
解决方案
方法一:强制指定兼容的snakeyaml版本
在项目依赖中强制引入shardingsphere兼容的snakeyaml版本(如1.33),覆盖SpringBoot默认版本:
Maven(pom.xml)
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.33</version> </dependency>
Gradle(build.gradle)
implementation('org.yaml:snakeyaml:1.33') { force = true }
方法二:升级ShardingSphere版本
ShardingSphere 5.4.2及以上版本已适配SpringBoot3.2的snakeyaml版本,直接升级依赖即可解决冲突:
Maven(pom.xml)
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>5.4.2</version> </dependency>
关键报错日志
jakarta.servlet.ServletException: 请求处理器分发失败:java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: 未找到方法'void
()'
...
Caused by: java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: 未找到方法'void()'
at org.apache.shardingsphere.infra.util.yaml.representer.ShardingSphereYamlRepresenter.(ShardingSphereYamlRepresenter.java:42)
...
内容的提问来源于stack exchange,提问作者user17453018

