优雅地关闭GWT超级开发模式

优雅地关闭GWT超级开发模式,gwt,database-connection,connection-pooling,shutdown,gwt-super-dev-mode,Gwt,Database Connection,Connection Pooling,Shutdown,Gwt Super Dev Mode,快速解释 对于我参与的一个项目,使用EclipseLuna作为IDE在GWT2.7中创建, 在我们的服务器代码中,我们有一个连接池(后端是一个mariadb数据库),配置了Hikari()。这一切都很好,除了一件事 问题 为了避免数据库服务器(ubuntu)爆炸,我实现了一个关机挂钩,如: public void addShutdownHook() { Runtime.getRuntime().addShutdownHook(new Thread() { @Overrid

快速解释

对于我参与的一个项目,使用EclipseLuna作为IDE在GWT2.7中创建, 在我们的服务器代码中,我们有一个连接池(后端是一个mariadb数据库),配置了Hikari()。这一切都很好,除了一件事

问题

为了避免数据库服务器(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

几件事:

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

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


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

谢谢你的指导。我很快就上!连接到webapp生命周期比连接到jvm生命周期更有意义。至于最后一点,我无法验证它是否真的关闭了资源,我必须花一些时间玩服务器。嘿,只是想告诉你结果。你给了我一些很好的建议,最终找到了一个比我现有的更干净的解决方案。谢谢你!虽然eclipse将继续是一个痛苦的过程,但使用您描述的一些技巧可以做到这一点。在使用eclipse进行开发期间,您还可以尝试使用
minimumIdle=0
idleTime=30000
(30秒)运行,因此通常池中不会有太多(或任何)连接—它们大部分是按需创建的。