0

我们使用交换服务器获取电子邮件并打开连接 30 分钟,然后在接下来的 30 分钟内自动重新打开它。但是当我们要部署新的war-file并停止tomcat服务时,连接不会关闭,而连接期没有结束(30分钟)。所以这个时间间隔内无法启动tomcat服务。我试图用这样的关闭钩子来处理服务器停止

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){
        public void run() {
            connection.close();
        }
    }));

但它不起作用。还有其他方法可以关闭连接吗?

与交换服务器的连接在新线程中。雄猫 7.

我们还想以任何方式处理(关闭连接)停止 tomcat。

PS对不起我的英语。

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

4

2 回答 2

0

如果你杀死java proccess 关闭钩子肯定不会工作。因此 - 你不能以某种常见的方式处理这种情况。

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

我们有 2 个选项。

  1. 您要关闭的资源是 JVM 对象。当你杀死 JVM - 那个对象就死了。这里没有什么可关闭的。
  2. 您想要关闭的资源是持久的。那么——你为什么要关闭它?只需在新部署中重用。
于 2014-01-13T11:03:33.497 回答
0

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

而且我相信使用ServletContextListener比“addShutdownHook”要好得多。

于 2014-01-13T14:38:59.193 回答