Java 关闭浏览器上的数据库连接关闭

Java 关闭浏览器上的数据库连接关闭,java,jsf,Java,Jsf,我使用Primefaces/JSF2。由于一种特殊情况,我们使用jdbc连接而不是连接池。每个登录的用户一次只能保持一个DB连接。如果登录用户关闭浏览器而不是正确注销,则其DB连接将一直保持到空闲超时(15分钟),并且在这15分钟超时内无法立即再次登录 如果用户关闭浏览器而不是注销,有没有办法关闭用户数据库连接?没有,没有办法。至少,没有可靠的方法。您可以将会话超时设置为1分钟,使用ajax轮询使其保持活动状态,并使用HttpSessionListener#sessionDestroyed()关

我使用Primefaces/JSF2。由于一种特殊情况,我们使用jdbc连接而不是连接池。每个登录的用户一次只能保持一个DB连接。如果登录用户关闭浏览器而不是正确注销,则其DB连接将一直保持到空闲超时(15分钟),并且在这15分钟超时内无法立即再次登录


如果用户关闭浏览器而不是注销,有没有办法关闭用户数据库连接?

没有,没有办法。至少,没有可靠的方法。您可以将会话超时设置为1分钟,使用ajax轮询使其保持活动状态,并使用
HttpSessionListener#sessionDestroyed()
关闭连接。但是,整个方法仍然非常脆弱,容易失败

您应该始终在与触发SQL查询的位置相同的
try finally
块中,在尽可能短的范围内获取并关闭数据库资源,不要找借口。JavaEEWeb应用程序实际上无法与普通Java桌面应用程序相比,在普通Java桌面应用程序中,如果由于DB资源泄漏而崩溃,最终用户可以重新启动有缺陷的应用程序本身

另见:
  • -虽然与您的问题不完全相同,但答案非常适用于您的情况

    • 不,没有办法。至少,没有可靠的方法。您可以将会话超时设置为1分钟,使用ajax轮询使其保持活动状态,并使用
      HttpSessionListener#sessionDestroyed()
      关闭连接。但是,整个方法仍然非常脆弱,容易失败

      您应该始终在与触发SQL查询的位置相同的
      try finally
      块中,在尽可能短的范围内获取并关闭数据库资源,不要找借口。JavaEEWeb应用程序实际上无法与普通Java桌面应用程序相比,在普通Java桌面应用程序中,如果由于DB资源泄漏而崩溃,最终用户可以重新启动有缺陷的应用程序本身

      另见:
      • -虽然与您的问题不完全相同,但答案非常适用于您的情况

      您可以按浏览器请求而不是按浏览器会话创建jdbc会话。这样,每次请求完成时都会关闭它。您可以为每个浏览器请求而不是每个浏览器会话创建jdbc会话。这样,每次请求完成时,您都会关闭它。