Spring Boot在执行器关闭时无法停止Tomcat。

huangapple 未分类评论46阅读模式
英文:

Spring Boot fail to stop Tomcat on actuator shutdown

问题

我使用运行执行器关闭脚本停止Spring Boot(v2.1.7):

curl --noproxy "*" -XPOST -k https://127.0.0.1:8099/actuator/shutdown

它失败并抛出以下异常:

2020年4月7日 下午9:27:44 org.apache.catalina.core.StandardService stopInternal
INFO: 停止服务 [Tomcat]
2020年4月7日 下午9:27:44 org.apache.catalina.core.ContainerBase stopInternal
SEVERE: 在停止过程中出现了子容器错误
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 无法停止组件 [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:982)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1400)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1389)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:976)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:473)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:992)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:469)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:254)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stop(TomcatWebServer.java:309)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.stopAndReleaseWebServer(ServletWebServerApplicationContext.java:306)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onClose(ServletWebServerApplicationContext.java:172)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1032)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:975)
    at org.springframework.boot.actuate.context.ShutdownEndpoint.performShutdown(ShutdownEndpoint.java:70)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: 无法停止组件 [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:267)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1400)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1389)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:976)
    ... 21 more
Caused by: java.lang.SecurityException: 调用方提供了无效的全局上下文
    at org.apache.naming.factory.ResourceLinkFactory.validateGlobalContext(ResourceLinkFactory.java:105)
    at org.apache.naming.factory.ResourceLinkFactory.deregisterGlobalResourceAccess(ResourceLinkFactory.java:96)
    at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:329)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5413)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    ... 27 more

2020年4月7日 下午9:27:44 org.apache.catalina.core.ContainerBase stopInternal
SEVERE: 在停止过程中出现了子容器错误
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 在停止过程中出现了子容器错误
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:982)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:473)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:992)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:469)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:254)
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stop(TomcatWebServer.java:309)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.stopAndReleaseWebServer(ServletWebServerApplicationContext.java:306)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onClose(ServletWebServerApplicationContext.java:172)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1032)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:975)
    at org.springframework.boot.actuate.context.ShutdownEndpoint.performShutdown(ShutdownEndpoint.java:70)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: 在停止过程中出现了子容器错误
    at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:990)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1400)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1389)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute

<details>
<summary>英文:</summary>

I stop Spring Boot (v2.1.7) using a script that run actuator shutdown:  
`curl --noproxy &quot;*&quot; -XPOST -k https://127.0.0.1:8099/actuator/shutdown`  
### It fail with this exception: ###
&lt;!-- language: lang-none --&gt;

Apr 07, 2020 9:27:44 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service [Tomcat]
Apr 07, 2020 9:27:44 PM org.apache.catalina.core.ContainerBase stopInternal
SEVERE: A child container failed during stop
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:982)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1400)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1389)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:976)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:473)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:992)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:469)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:254)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stop(TomcatWebServer.java:309)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.stopAndReleaseWebServer(ServletWebServerApplicationContext.java:306)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onClose(ServletWebServerApplicationContext.java:172)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1032)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:975)
at org.springframework.boot.actuate.context.ShutdownEndpoint.performShutdown(ShutdownEndpoint.java:70)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:267)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1400)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1389)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:976)
... 21 more
Caused by: java.lang.SecurityException: Caller provided invalid global context
at org.apache.naming.factory.ResourceLinkFactory.validateGlobalContext(ResourceLinkFactory.java:105)
at org.apache.naming.factory.ResourceLinkFactory.deregisterGlobalResourceAccess(ResourceLinkFactory.java:96)
at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:329)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5413)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
... 27 more

Apr 07, 2020 9:27:44 PM org.apache.catalina.core.ContainerBase stopInternal
SEVERE: A child container failed during stop
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during stop
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:982)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:473)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:992)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:469)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:254)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stop(TomcatWebServer.java:309)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.stopAndReleaseWebServer(ServletWebServerApplicationContext.java:306)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onClose(ServletWebServerApplicationContext.java:172)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1032)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:975)
at org.springframework.boot.actuate.context.ShutdownEndpoint.performShutdown(ShutdownEndpoint.java:70)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: A child container failed during stop
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:990)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:257)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1400)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1389)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:976)
... 14 more

And Tomcat embedded server is not closed.  
How can I solved it?
  
Ignore the following - just writing text here because I can&#39;t post - getting error message: &quot;It looks like your post is mostly code; please add some more details.&quot;


</details>


huangapple
  • 本文由 发表于 2020年4月8日 03:00:30
  • 转载请务必保留本文链接:https://java.coder-hub.com/61087459.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定