java - 如何在开始时启动Tomcat关闭监听器

标签 java tomcat server

如果我在启动后立即停止 Tomcat 服务器,它会给出以下错误:

Aug 08, 2016 11:54:26 AM org.apache.catalina.startup.Catalina stopServer
SEVERE: Could not contact localhost:8080. Tomcat may not be running.
Aug 08, 2016 11:54:26 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:345)
        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:450)
        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:400)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:487)

The stop command failed. Attempting to signal the process to stop through OS signal.
Tomcat stopped.

通常,当 tomcat 启动时,最后的消息类似于“服务器在 XXX 毫秒内启动”。关闭监听器在启动 Tomcat 结束时启动。

如何在 tomcat 启动时在开始时启动“Shutdown Listener”。

最佳答案

你不想那样做(*)。为了清楚地要求 Tomcat 停止,停止脚本会尝试向它发送一个特殊请求。 Tomcat 开发人员发现,如果 Tomcat 由于任何原因无法响应请求,可能会出现问题:没有仍然处于 Activity 状态,部分或完全崩溃等。为了解决它,他们只是记录 Tomcat 不在其正常状态并继续强制停止它的操作系统信号。顺便说一句,如果能够停止,脚本会在真正的结尾打印 Tomcat stopped 正常进行。

即使您可以构建一个特殊版本的 Tomcat,它会尝试尽快处理请求,但仍然会有一段时间出现竞争条件,更不用说可能的崩溃了。

如果您只是不想显示错误消息,只需将真实的脚本用一个薄包装器包装起来,该包装器可以获取输出和错误输出,可选地记录所有内容以便在出现实际问题时进行进一步研究,然后只需搜索对于字符串 Tomcat stopped。如果找到,则丢弃其他所有内容并仅显示它,如果在脚本结束后未找到,则发出错误信号并提供完整输出以供引用。

(*) 无论如何,我无法想象一个可靠的系统......

关于java - 如何在开始时启动Tomcat关闭监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824991/

相关文章:

java - 2 列组合框

java - 抽象类及其子类型的 StdDeserializer

c# - 使 IEnumerator 以某种方式返回值的解决方法

spring - 在 weblogic 10.3.6 中部署 Spring 4.1.6 mvc webapp

mysql - 8. 0.11 - 安装程序错误 - 身份验证方法

C: 处理 `cd ..` 和服务器应用程序上的其他命令并返回反馈给客户端

java - 安卓。 JSON 解析器在我的新模块中返回 null

java - (Gridbag 布局)图形组件被剪切到另一个网格中,不知道为什么

tomcat - HTTPS 通信失败,jdk 1.6(32 位客户端)与 jdk 1.8(64 位)服务器 : READ: Unknown-3. 3 警报,长度 = 2

tomcat - 在tomcat根目录下部署war文件