gpt4 book ai didi

java - 使用 ehcache 部署 Spring Boot 应用程序时 Tomcat 不会关闭

转载 作者:行者123 更新时间:2023-11-28 23:23:21 26 4
gpt4 key购买 nike

我对 tomcat 有一个奇怪的问题,我在 tomcat 上部署了一个 spring boot 应用程序(独立而不是嵌入式)。我能够成功启动 tomcat,并且工作正常,没有任何问题。但是当我运行关机(调用 shutdown.sh 脚本)时,它显示连接被拒绝。这个我试过了

Tomcat doesn't stop. How can I debug this? ,但没有解决我的问题。我尝试删除我的 spring boot 应用程序,它运行良好,没有任何问题。我能够启动和停止tomcat。经过进一步分析,我发现这是因为spring boot应用程序中配置的ehache。需要配置 ehcache 的关闭监听器,在 spring boot 中最好的方法是什么。

我也试过这个选项。

How to shutdown a Spring Boot Application in a correct way?

./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 关闭 Hook ....在 spring boot 中执行此操作的最佳方法是什么?

最佳答案

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

如果您想在应用程序服务器(如 Tomcat)中运行,您需要做的第一件事就是删除嵌入式容器依赖项以防止任何冲突或争用。您可以找到有关如何执行此操作的好指南 here .

如果您已完成该操作但仍有问题,则意味着您有非守护线程仍在应用程序服务器中运行(这会阻止它终止)。您可以使用 jstack识别这些线程,然后编写您自己的 ServletContextFinalizer 以在 contextDestroyed 上优雅地停止这些线程。

关于java - 使用 ehcache 部署 Spring Boot 应用程序时 Tomcat 不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40104909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com