我对tomcat有一个奇怪的问题,我在tomcat上部署了一个spring boot应用程序(Stand alone not embedded)。我能够成功启动tomcat,它可以解决任何问题。但是当我运行shutdown(调用shutdown.sh脚本)时,它显示连接被拒绝。我试过了这个
Tomcat doesn't stop. How can I debug this?,但无法解决我的问题。我已经尝试删除我的春季启动应用程序,它可以解决任何问题。我能够启动和停止tomcat。经过进一步分析后,我发现这是因为在spring boot应用程序中配置了ehache。需要配置ehcache的关闭监听器,在春季启动时最好的方法是什么。
我也试过这个选项。
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关闭钩子....弹簧启动时最好的方法是什么?