当前位置: 首页 > 知识库问答 >
问题:

正常关机失败

田兴旺
2023-03-14

我有一个带服务器的spring boot 2.3应用程序。shutdown=优雅,当关闭时抛出:

 2020-11-30 11:07:35.485  WARN 3038 --- [SpringContextShutdownHook] o.s.c.support.DefaultLifecycleProcessor  : Failed to stop bean 'webServerGracefulShutdown'
 
 java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: org/springframework/boot/web/server/GracefulShutdownResult
     at org.springframework.boot.web.servlet.context.WebServerGracefulShutdownLifecycle.stop(WebServerGracefulShutdownLifecycle.java:51)
     at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:238)
     at org.springframework.context.support.DefaultLifecycleProcessor.access$300(DefaultLifecycleProcessor.java:53)
     at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:377)
     at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:210)
     at org.springframework.context.support.DefaultLifecycleProcessor.onClose(DefaultLifecycleProcessor.java:128)
     at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1022)
     at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:170)
     at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:949)
 Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/web/server/GracefulShutdownResult
     ... 9 common frames omitted
 Caused by: java.lang.ClassNotFoundException: org.springframework.boot.web.server.GracefulShutdownResult
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
     at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
     ... 9 common frames omitted
 
 2020-11-30 11:08:05.486  INFO 3038 --- [SpringContextShutdownHook] o.s.c.support.DefaultLifecycleProcessor  : Failed to shut down 1 bean with phase value 2147483647 within timeout of 30000ms: [webServerGracefulShutdown]
 2020-11-30 11:08:35.514  INFO 3038 --- [SpringContextShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
 2020-11-30 11:08:35.519  INFO 3038 --- [SpringContextShutdownHook] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'taskScheduler'
 2020-11-30 11:08:35.520  INFO 3038 --- [SpringContextShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
 2020-11-30 11:08:35.528  INFO 3038 --- [SpringContextShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
 2020-11-30 11:08:35.530  INFO 3038 --- [SpringContextShutdownHook] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService

最后,应用程序关闭,但不是优雅地关闭,并且由于从部署脚本调用关闭,脚本失败,原因是应用程序关闭调用的退出代码!=0。

这可能是什么原因?我想我没有长时间运行的任务,这可能会导致这种情况,但我如何检查它呢?

共有2个答案

狄宇
2023-03-14

我们在git lab管道中遇到了同样的问题,我已经更改了管道,先停止现有的应用程序,然后替换新的jar文件。希望这能解决这个问题。

松昱
2023-03-14

如果在jar仍在运行时替换或重命名jar,则可能会出现此问题。Java在启动时不会将整个jar放在内存中,当需要加载某些类时,会对jar中的类使用引用。但是重命名jar或替换jar可能会搞乱jar中的类引用。因此,java在运行时找不到要加载的类,您将看到这个ClassNotFoundException

可能的解决方法:在替换或重命名jar之前尝试关闭应用程序。

 类似资料:
  • 问题内容: 我希望能够停止在Linux中的服务器套接字上进行侦听,并确保正确处理了从客户端角度打开的所有连接,并且没有突然关闭它们(即:接收ECONNRESET)。 即: 如果认为调用close()并处理已经接受的套接字就足够了,但是可以在内核积压中打开一些连接,如果在服务器套接字上调用close(),这些连接将突然关闭。 问题答案: 唯一可行的方法(我发现)是: 阻止添加更多客户端 在某处有一个

  • 我们在应用程序中使用docker compose,但不熟悉应用程序的这一部分。在运行<code>docker Cosme up--build<code>后,我们遇到了此错误:

  • 4.5 正确的关机方法 OK!大概知道开机的方法,也知道基本的指令操作,而且还已经知道线上查询了,好累呦! 想去休息呢!那么如何关机呢?我想,很多朋友在DOS的年代已经有在玩计算机了! 在当时我们关掉DOS的系统时,常常是直接关掉电源开关,而 Windows 在你不爽的时候,按着电源开关四秒也可以关机!但是在Linux则相当的不建议这么做! Why?在 Windows (非 NT 主机系统) 系统

  • 问题内容: 我是我的代码,我向ExecutorService提交了一些任务,然后使用shutdown()和awaitTermination()等待它们完成。但是,如果任何一项任务花费的时间超过某个时间段,我希望取消它而不影响其他任务。我使用来自ExecutorService的代码修改代码,该代码在超时后中断任务,如下所示: 一个测试用例,用于说明何时有时间完成任务以及何时它们都不工作 并且在我的代

  • 问题内容: 在我的webapp中,我创建了一个使用固定大小的ThreadPool的服务。我在整个应用程序生命周期中都重复使用了相同的代码。 所有人都在Tomcat中运行,这在关闭时给我以下错误: 我确实意识到我需要在关闭tomcat之前先关闭ExecutorService。Soms SO线程已经在谈论这一点,但是我找不到一种干净的方法来解决这个问题。 是否应该在正常关闭线程和执行器的情况下使用建议

  • 问题内容: 我目前在关闭应用程序的CTRL-C期间关闭异步协程时遇到问题。下面的代码是我现在所拥有的简化版本: 如果按CTRL-C,会给我以下输出: 我对asyncio的经验不是很丰富,所以我很确定我在这里缺少重要的东西。真正让我头疼的是输出之后的部分。从开始,我必须承认我不知道发生了什么。我查看了其他问题,但无法正常工作。那么,为什么这段代码输出类似的东西?如何干净地关闭协程呢? 谢谢你的帮助!