【问题标题】:Gracefully shutdown GWT super dev mode优雅关闭 GWT 超级开发模式
【发布时间】:2015-02-17 20:32:14
【问题描述】:

快速解释

对于我参与的一个项目,使用 Eclipse Luna 作为 IDE 在 GWT 2.7 中创建, 在我们的服务器代码中,我们有一个使用 Hikari (http://brettwooldridge.github.io/HikariCP/) 配置的连接池(后端是 mariadb 数据库)。这一切都很好,除了一件事..

问题

为了避免我们的数据库服务器 (ubuntu) 爆炸,我实现了一个关闭挂钩,例如:

public void addShutdownHook() {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            dataSource.shutdown();
        }
    });
}

理想情况下处理连接池中的连接清理。 然而,我注意到,当通过单击 Eclipse 中的 Terminate 按钮关闭 SDM 时,dataSource.shutdown();永远不会被调用,可能是因为服务器没有正常关闭。

以上似乎导致(我没有足够的 linux(与 mariadb 结合)知识来确定这是否属实,但对我来说这似乎是最合乎逻辑的)最终使服务器变得非常慢,并最终耗尽它的资源。所以我的假设是服务器保持连接处于活动状态,它们会堆叠 n 次,直到资源不再可用并且服务器爆炸。

问题

如何使用 SDM 正确清理这些资源?或者我不应该在开发过程中使用连接池,而只在验收/生产环境中使用它?

感谢您的宝贵时间b

【问题讨论】:

  • 在开发过程中使用 Eclipse,您也可以尝试使用 minimumIdle=0idleTime=30000 运行(30 秒),所以通常不会有很多(或任何)连接池中的连接——它们主要是按需创建的。

标签: gwt database-connection connection-pooling shutdown gwt-super-dev-mode


【解决方案1】:

几件事:

  • 您应该使用 webapp 生命周期而不是 JVM 生命周期。使用ServletContextListener 而不是关闭挂钩。

  • 这是一个 Eclipse 问题,它总是强制终止进程,绕过关闭挂钩。使用 servlet 上下文侦听器后,请在终止进程之前尝试重新加载 webapp。

也就是说,如果这是您的问题,我会觉得很奇怪:杀死进程应该关闭所有连接,释放服务器上的资源(否则,如果您问我,那将是服务器错误)

【讨论】:

  • 感谢您的指导。我会尽快上手的!连接到 webapp 生命周期比 jvm 生命周期更有意义。至于最后一点,我无法验证它是否真的关闭了资源,我得花点时间玩服务器。
  • 嘿,只是回复你让你知道结果。你给了我一些很好的指导,最终导致了比我所拥有的更清洁的解决方案。感谢那!尽管 eclipse 将继续是一种痛苦,但按照您的要求使用一些技巧就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多