Liquibase/Springboot 启动异常

2022-09-04 02:58:01

从昨天(星期日)早上开始,我的生产应用程序无法启动,我这边没有代码更改。它运行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试图突然找到它吗?


答案 1

我遇到了同样的问题。在Amazon Linux 2的启动过程中,安装了一个安全补丁。

导致问题的软件包是log4j-cve-2021-44228-hotpatch.noarch(您可以在/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

感谢@mihristov的解决方案。


答案 2

详细阐述一下这里发生的事情:

AWS 开发了一个 systemd 服务,该服务每秒都会查找在系统上运行的任何 JVM。对于它找到并支持的所有内容,它连接一个java代理,该代理在运行时将log4j JNDI方法替换为硬编码的安全字符串。lookup()

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

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

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


推荐