我使用Primefaces / JSF2。由于特殊情况,我们使用jdbc连接而不是连接池。每个登录用户一次只能保存一个DB连接。如果登录用户关闭浏览器而不是正确注销,则他的数据库连接将保持到空闲超时(15分钟),并且在15分钟超时内无法立即再次登录。
有没有办法关闭用户数据库连接,如果他关闭浏览器而不是注销?
答案 0 :(得分:4)
不,没有办法。至少,没有可靠的方法。您可以将会话超时设置为1分钟,使用ajax轮询使其保持活动状态,并使用HttpSessionListener#sessionDestroyed()
关闭连接。但是,整个方法仍然非常脆弱,容易失败。
您应该始终在与SQL查询/查询被触发的同一try-finally
块中尽可能短的范围内获取和关闭数据库资源,没有任何借口。 Java EE Web应用程序实际上无法与普通的Java桌面应用程序相媲美,在这种应用程序中,如果由于数据库资源泄漏而崩溃,最终用户只能重新启动有问题的应用程序。