昨天部署 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
找了一圈,发现比较接近的问题是:
解决方案
最后找到两个解决方案:
- 删除
application.yml上的所有注释 application.yml保持所有注释,末尾添加一个空行
相关疑问
- 以前遇到过类似的问题,统一修正了
application.yml里的配置值,主要使用双引号或单引号,解决配置值出现的符号。但这次应该不是这个问题。 - 感觉 snakeyaml 不太稳定,特别是配置文件末尾再添加了一个空行就能解决。是因为版本旧吗?新版 snakeyaml 会不会更稳定一点?
- 如果不使用 YAML 格式,大家推荐什么格式?感觉可以考虑 JSON 格式,起码语法比 YAML 熟悉,但是对于动态值,不知道支持情况如何?