关于 Spring Boot 采用 YAML 配置文件,不稳定的问题

2023-09-13 10:54:31 +08:00
 fox0001

昨天部署 Spring Boot 项目时,发现 Tomcat 跑不起来。

错误情况

Tomcat 日志显示 snakeyaml 读取配置文件报错:

Caused by: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1024

找了一圈,发现比较接近的问题是:

ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1024 on large yml files after upgrading to Boot 2.6.4 and Spring Cloud 2021 .0.1 #30159

解决方案

最后找到两个解决方案:

  1. 删除application.yml上的所有注释
  2. application.yml保持所有注释,末尾添加一个空行

相关疑问

  1. 以前遇到过类似的问题,统一修正了application.yml里的配置值,主要使用双引号或单引号,解决配置值出现的符号。但这次应该不是这个问题。
  2. 感觉 snakeyaml 不太稳定,特别是配置文件末尾再添加了一个空行就能解决。是因为版本旧吗?新版 snakeyaml 会不会更稳定一点?
  3. 如果不使用 YAML 格式,大家推荐什么格式?感觉可以考虑 JSON 格式,起码语法比 YAML 熟悉,但是对于动态值,不知道支持情况如何?
930 次点击
所在节点    Java
3 条回复
ikas
2023-09-13 19:33:06 +08:00
有没有对比最终打包后的编码?以前遇到过这个问题,是 idea 与 maven 配置的编码不一致问题导致的
fox0001
2023-09-14 13:03:41 +08:00
@ikas #1 谢谢回复。配置文件的字符编码,应该是没问题的,都是 UTF-8 。目前怀疑文件里参杂了 Unix 和 Windows 的换行符。
liuyunlong
2023-09-15 10:31:55 +08:00
会不会有这个可能,当你修改时所处的换行符格式出现了问题。例如 windows 修改 的换行符 。当然这只是建议

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/973302

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX