背景
springboot2.2.x 升级到是springboot2.7.x,apollo-client也跟着升级到了2.0.1,配置中心使用.properties的应用启动正常,
使用.yml报了上面的错误
解决方案
- 版本降级到1.33解决
下面是ai回答的结果
让我们尝试几个可能的解决方案:
- 检查你的 Spring Boot 版本和 SnakeYAML 版本是否匹配。对于 Spring Boot 3.x,建议使用:
<!-- Spring Boot 3.x -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>
<!-- Spring Boot 2.x -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.33</version>
</dependency>
- 如果你使用 Spring Boot parent,可以尝试在 properties 中覆盖版本:
<properties>
<snakeyaml.version>2.2</snakeyaml.version>
</properties>
- 尝试清理依赖冲突:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>
- 检查 YAML 文件格式是否正确:
- 确保缩进使用空格而不是制表符
- 检查键值对格式
- 确保冒号后有空格
- 如果以上都不行,可以尝试降级 SnakeYAML 版本:
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.33</version>
</dependency>
- 重新构建项目:
mvn clean package -U
根因探究
升级后的apollo-client在将yaml转properties的时候还是老版本snakeyaml的构造方法。
思考
其实这类问题很好解决,但是花了很长时间定位。
- method
()V 这种是构造函数报的错,理论自己应该推测出来时版本兼容问题 - 在搜索问题时丢失了异常的上下文,但也因此查到了是版本兼容问题,只是结果是springboot和snakeyaml的版本兼容
https://github.com/spring-projects/spring-boot/issues/34405 - 再结合上下文是定位是apollo-client和snakeyaml的兼容问题