簡體   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