会话到期时关闭jdbc连接对象

时间:2012-03-15 13:34:39

标签: java jdbc

我正在创建一个Connection对象并在类的构造函数(DbTest)中建立jdbc连接。

然后在另一个java类(RequestFilter.java)中,我正在初始化此对象并将此实例对象存储在HTTP Session中,

DbTest dbtest = new DbTest();
session.setAttribute("dbtest", dbtest);

我的问题是,有没有办法关闭会话到期时创建的连接对象?或者它会在到期后自动关闭吗?

4 个答案:

答案 0 :(得分:4)

您可以实施HttpSessionListener并在sessionDestroyed()方法内进行清理。但是你的架构让我担心。您不应该在HTTP会话中存储原始JDBC连接!

  • 您无法将HTTP会话迁移到其他服务器

  • 您可以轻松创建数千个开放式数据库连接,HTTP会话更轻量级

  • 99.9%的数据库连接空闲时间

  • 您可能无法处理连接超时和其他故障

是否有每个用户而不是连接池建立连接的原因?

答案 1 :(得分:0)

您可以实现HttpSessionBindingListener。

答案 2 :(得分:0)

您需要显式关闭连接对象。您可以在finalize方法中关闭集合,但不建议不要调用finalize。更好的方法是编写和调用方法,它将明确地关闭此连接。建议不要在构造函数中创建JDBC连接。

答案 3 :(得分:0)

管理连接池也可能是个问题。要从连接池获取连接,您需要使用同步,这会阻止其他线程(客户端)访问连接池。