昨天部署 Spring Boot 项目时,发现 Tomcat 跑不起来。
错误情况
- Spring Boot 版本 2.6.6
- application.yml 采用 Windows 换行格式
- 项目部署在 Debian 11
- Tomcat 版本 9.0.43
- 以前一直是能跑的,这次发版,application.yml 添加了新的配置项
- 另一个项目 B ,依赖相同的项目,几乎相同的 application.yml ,没有问题,甚至把项目 B 的 application.yml 复制过来,能跑起来
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
解决方案
最后找到两个解决方案:
- 删除
application.yml上的所有注释
application.yml保持所有注释,末尾添加一个空行
相关疑问
- 以前遇到过类似的问题,统一修正了
application.yml里的配置值,主要使用双引号或单引号,解决配置值出现的符号。但这次应该不是这个问题。
- 感觉 snakeyaml 不太稳定,特别是配置文件末尾再添加了一个空行就能解决。是因为版本旧吗?新版 snakeyaml 会不会更稳定一点?
- 如果不使用 YAML 格式,大家推荐什么格式?感觉可以考虑 JSON 格式,起码语法比 YAML 熟悉,但是对于动态值,不知道支持情况如何?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/973302
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.