2012-03-15 51 views
1

我正在创建Connection对象并在类(DbTest)的构造函数中创建jdbc连接。会话过期时关闭jdbc连接对象

在另一个Java类(RequestFilter.java)

然后,我这个对象的初始化和存储在HTTP会话这个实例对象,

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

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

回答

4

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

  • 你不能HTTP会话迁移到另一台服务器

  • 您可以轻松创建成千上万打开的数据库连接,HTTP会话是更轻便

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

  • 你不大可能处理连接超时和其他故障

有每个用户连接而不是连接池的原因吗?

+0

我明白了。 Plz在下面的链接中详细说明了我的问题,因为我无法在本文的评论部分添加足够的内容,http://stackoverflow.com/questions/9723270/making-jdbc-connection-and-storing-in-session – 2012-03-15 15:51:39

0

你可以实现HttpSessionBindingListener。

+0

'HttpSessionBindingListener':*使对象在与会话绑定或解除绑定时得到通知*。 OP希望在会话到期时得到通知*。 'HttpSessionListener'是一个更好的选择。 – 2012-03-15 13:42:07

+0

使对象在与会话绑定或解除绑定时收到通知。该对象由HttpSessionBindingEvent对象通知。这可能是由于servlet程序员显式地从会话中解除了某个属性的结果,这是由于会话失效或由于会话超时而造成的。 – cjstehno 2012-03-15 16:58:08

0

您需要显式关闭连接对象。您可以在finalize方法中关闭集合,但不建议这样做,因为可能不会调用finalize。更好的方法是编写和调用将显式关闭此连接的方法。也不建议在构造函数中创建JDBC连接。

0

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

相关问题