springcloud-config 每跑一段时间启动失败,错误信息如下
2022-05-16 13:57:52.672 INFO 11000 --- [http-nio-9088-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-05-16 13:57:52.684 INFO 11000 --- [http-nio-9088-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 12 ms
2022-05-16 13:57:52.954 ERROR 11000 --- [http-nio-9088-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateE
xception: Cannot load environment] with root cause
java.io.EOFException: Short read of block.
at org.eclipse.jgit.util.IO.readFully(IO.java:235) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.dircache.DirCache.readFrom(DirCache.java:484) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.dircache.DirCache.read(DirCache.java:436) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.dircache.DirCache.read(DirCache.java:222) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.dircache.DirCache.read(DirCache.java:194) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.lib.Repository.readDirCache(Repository.java:1248) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.lib.IndexDiff.diff(IndexDiff.java:412) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.lib.IndexDiff.diff(IndexDiff.java:386) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.api.StatusCommand.call(StatusCommand.java:155) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.shouldPull(JGitEnvironmentRepository.java:427) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.refresh(JGitEnvironmentRepository.java:269) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.getLocations(JGitEnvironmentRepository.java:246) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.getLocations(MultipleJGitEnvironmentRepository.java:146) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.AbstractScmEnvironmentRepository.findOne(AbstractScmEnvironmentRepository.java:51) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.findOne(MultipleJGitEnvironmentRepository.java:186) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.CompositeEnvironmentRepository.findOne(CompositeEnvironmentRepository.java:52) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.EnvironmentEncryptorEnvironmentRepository.findOne(EnvironmentEncryptorEnvironmentRepository.java:54) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at org.springframework.cloud.config.server.environment.EnvironmentController.labelled(EnvironmentController.java:122) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
通过查看 spring-cloud-config 官方的 pr 记录发现有一条记录修复了关于 Short read of block 的问题
https://github.com/spring-cloud/spring-cloud-config/pull/1593
通过查询 commit 记录
https://github.com/spring-cloud/spring-cloud-config/pull/1593/commits/9c4c644efc35eddc8e626a446c65ff9a740f716c
发现作者在 Short read of block.
异常出现的时候:
ResetType.HARD
这里出问题的类为 JGitEnvironmentRepository
通过查看该 pr 发现已在 2021 年 1 月 12 日合并入 spring cloud:2.2.x 分支, 且 Hoxton.SR10
和 2020.0.1
分支的 CI 同时完成了该 pr 的合并.
目前我们的 sekorm-config-server 使用的 spring-cloud 版本为 Greenwich.SR4
;
而查看 springcloud 的 release note 可以发现, Greenwich 的最新版 Greenwich.SR6 在 20 年 5 月发布, 此时该 pr 暂未合并, 故要解决该问题, 需要做一次跨大版本的依赖升级。
建议升级 springcloud 最低的版本为 Hoxton.SR10
。
网上的解决方案目前为:
把配置中心的缓存文件夹删除后,重启配置中心。
但想要彻底解决问题,还是需要升级 springcloud 版本才行。