繁体   English   中英

使用ehcache部署Spring Boot应用程序时,Tomcat无法关闭

[英]Tomcat not shutting down when Spring boot app is deployed with ehcache

我对tomcat有一个奇怪的问题,我在tomcat上部署了一个Spring Boot应用程序(未单独站立)。 我能够成功启动tomcat,并且在没有任何问题的情况下都能正常工作。 但是,当我运行shutdown(调用shutdown.sh脚本)时,它显示连接被拒绝。 我已经尝试过了

Tomcat不会停止。 我该如何调试? ,但不能解决我的问题。 我试着删除我的spring boot应用程序,它运行正常,没有任何问题。 我能够启动和停止tomcat。 经过进一步分析,我发现这是因为在Spring Boot应用程序中配置了ehache。 需要配置ehcache的关闭侦听器,这是在Spring Boot中执行此操作的最佳方法。

我也尝试过此选项。

如何以正确的方式关闭Spring Boot应用程序?

./shutdown.sh
Using CATALINA_BASE:   /app/tomcat/myapp
Using CATALINA_HOME:   /app/tomcat/myapp
Using CATALINA_TMPDIR: /app/tomcat/myapp/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_71
Using CLASSPATH:   

    /app/tomcat/myapp/bin/bootstrap.jar:/app/tomcat/myapp/bin/tomcat-juli.jar
    Oct 18, 2016 5:36:33 AM org.apache.catalina.startup.Catalina stopServer
  SEVERE: Could not contact localhost:8005. Tomcat may not be running.
Oct 18, 2016 5:43:31 AM org.apache.catalina.startup.Catalina stopServer
SEVERE: Catalina.stop:
java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at java.net.Socket.<init>(Socket.java:434)
        at java.net.Socket.<init>(Socket.java:211)
        at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:476)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:408)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:497)

#-> netstat -anpl|grep -i 8005
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      21668/java

我不确定为什么会这样? 知道为什么会这样吗? 为什么它不能监听关机端口? 还为什么关闭端口有127.0.0.1? 而其他过程没有吗?

我试图对端口进行telnet连接

telnet 127.0.0.1 8005
 Trying 127.0.0.1...
 Connected to 127.0.0.1.
 Escape character is '^]'.

任何想法,为什么这将是一个问题。

--------更新

我已经知道,当我们将ehcache独立部署为spring boot应用程序时,这种情况正在发生。 必须调用ehcache shutdown钩子。...在春季启动时执行此操作的最佳方法是什么?

默认情况下,Spring Boot应用程序配置为独立运行。

如果要在Application Server(例如Tomcat)中运行,则要做的第一件事是删除嵌入式容器的依赖项,以防止发生任何冲突或争用。 您可以在此处找到有关如何执行操作的指南。

如果您这样做了,但仍然遇到问题,这意味着您的Application Server内部有非守护进程线程正在运行(这阻止了它终止)。 您可以使用jstack识别这些线程,然后编写自己的ServletContextFinalizer以在contextDestroyed上优雅地停止这些线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM