正常关闭GWT super dev模式

时间:2015-02-17 20:32:14

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

快速解释

对于我参与的项目,使用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正确清理这些资源?或者我应该在开发期间不使用连接池,只在接受/生产环境中使用它?

感谢您的时间

1 个答案:

答案 0 :(得分:2)

有几件事:

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

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

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