Liquibase/Springboot启动异常



从昨天(周日(早上开始,我的生产应用程序无法启动,我这边没有代码更改。它运行Springboot 2.3.4,Liquibase core 3.8.0,并托管在Amazon linux2上。有趣的是,只有在部署时,本地才有例外。

以下是相关的堆栈跟踪:

Caused by: liquibase.exception.UnexpectedLiquibaseException: java.nio.file.NoSuchFileException: /tmp/agent12302722365010540729.jar
at liquibase.servicelocator.ServiceLocator.setResourceAccessor(ServiceLocator.java:129)
at liquibase.servicelocator.ServiceLocator.<init>(ServiceLocator.java:69)
at liquibase.servicelocator.CustomResolverServiceLocator.<init>(CustomResolverServiceLocator.java:16)
at org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener$LiquibasePresent.replaceServiceLocator(LiquibaseServiceLocatorApplicationListener.java:55)
at org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener.onApplicationEvent(LiquibaseServiceLocatorApplicationListener.java:44)
at org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener.onApplicationEvent(LiquibaseServiceLocatorApplicationListener.java:36)
...
Caused by: java.nio.file.NoSuchFileException: /tmp/agent801508645517312012.jar
at liquibase.resource.ClassLoaderResourceAccessor.getResourcesAsStream(ClassLoaderResourceAccessor.java:53)
at liquibase.servicelocator.ServiceLocator.setResourceAccessor(ServiceLocator.java:115)

我仔细检查了所有与应用程序相关的文件和env变量,它们都是一样的。有问题的文件与我的应用程序没有任何关系。

你知道这个文件是什么吗?为什么Liquibase突然试图找到它?

我也遇到了同样的问题。在启动amazonlinux2时,安装了一个安全补丁。

导致问题的软件包是log4j-cve-2021-44228-hotpatch.noach(您可以在/var/log/yum.log中查看(

一个临时解决方案是卸载补丁并安装另一个java版本。

yum remove log4j-cve-2021-44228-hotpatch.noarch
yum install java-11-openjdk-11.0.12.0.7-0.amzn2.0.2.x86_64

感谢@mihistov提供的解决方案。

要详细说明这里发生的事情:

AWS开发了一个systemd服务,它每秒都会查找系统上运行的JVM。尽管它找到并支持了所有这些,但它连接了一个java代理,该代理在运行时用硬编码的安全字符串替换log4j JNDIlookup()方法。

我不清楚为什么利口酒在这方面失败了。我确实看到已经给出的答案似乎过于侵入性。不需要删除/重新安装/更新JVM。您可以通过以下方式解决此问题:

  • 停止系统修补程序服务:sudo service log4j-cve-2021-44228-hotpatch status|stop|start

  • 最佳解决方案-创建终止文件,如果服务读取该文件,则停止应用补丁:sudo touch /etc/log4j-cve-2021-44228-hotpatch.kill

对于我们来说,使用最新的liquibase(4+(解决了这个问题。他们在4+中使用了更标准的ServiceLocator,这似乎起到了作用。

这是java-11-azon-corretto-headless-11.0.13+8-2.amzn2.aarch64 的临时问题

要修复:

yum remove log4j-cve-2021-44228-hotpatch.noarch
yum install java-11-amazon-corretto-headless-11.0.13+8-1.amzn2.aarch64

感谢@Reda和@mihistov指出了这个问题。

我们实际的解决方案只是安装一个特定版本的corretto,而不是通用包

yum install java-11-amazon-corretto-headless-11.0.13+8-1.amzn2.aarch64

您只能临时执行操作,直到修复完成为止!

最新更新