Java 处理tomcat停止

Java 处理tomcat停止,java,tomcat7,exchangewebservices,shutdown-hook,Java,Tomcat7,Exchangewebservices,Shutdown Hook,我们使用exchange server获取电子邮件,并在30分钟内打开连接,然后在接下来的30分钟内自动重新打开连接。但当我们想要部署新的war文件并停止tomcat服务时,连接并没有关闭,而连接周期并没有结束(30分钟)。因此,在此时间间隔内无法启动tomcat服务。 我试着用关机钩子处理服务器停止,就像这样 Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){ public void run()

我们使用exchange server获取电子邮件,并在30分钟内打开连接,然后在接下来的30分钟内自动重新打开连接。但当我们想要部署新的war文件并停止tomcat服务时,连接并没有关闭,而连接周期并没有结束(30分钟)。因此,在此时间间隔内无法启动tomcat服务。 我试着用关机钩子处理服务器停止,就像这样

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){
        public void run() {
            connection.close();
        }
    }));
但它不起作用。 是否有其他方法来关闭连接

与exchange server的连接处于新线程中。 Tomcat 7

此外,我们希望以任何方式处理(关闭连接)停止tomcat

对我的英语很抱歉


更新:我发现bean的destroy方法已经执行,但连接会在1-2分钟内关闭。对于网站来说,它仍然太长。

如果你杀死java进程,关闭钩子肯定不会起作用。因此,您无法以某种常见的方式处理这种情况

但想想当您停止服务器时关闭连接的原因是什么? 服务器关闭时,哪些资源保持打开状态

我们有两个选择

  • 要关闭的资源是JVM对象。当你杀死JVM时,这个对象就死了。这里没什么可关闭的
  • 您想要关闭的资源是持久性的。那么-你为什么要关闭它?只需在新部署中重用即可

  • 如果你的Tomcat没有停止,那么可能还有另一个永无止境的线程仍然存在。因此,您应该首先在关闭挂钩中停止该线程


    我相信使用a的方式比使用“addShutdownHook”要好。

    Thx谢谢您的回复。问题是Tomcat并没有停止,我不能在不终止进程的情况下部署新的war文件。我怎么能再利用它?哦,现在有了。在这种情况下,shutdownhook将不会帮助您,因为它不知道tomcat会关闭。这种情况下的关机是特定于servlet的实体。您可以编写ServletContextListener Thx来获得答案,但现在我遇到了另一个问题:连接关闭的时间太长。大约1-2分钟。对于网站来说,这是一个很长的休息时间。然后,唯一的选择是终止java进程,而不是使用native way.yep停止Tomcat。我已经在destroy方法中添加了System.exit(0),但几个小时前我看到它只在第一次重新连接之前工作。我在如何使用exchange服务方面遇到的问题:(谢谢您的回答,但现在我有另一个问题:连接关闭时间太长。大约1-2分钟。网站的休息时间太长。