我正在创建Connection对象并在类(DbTest)的构造函数中创建jdbc连接。会话过期时关闭jdbc连接对象
在另一个Java类(RequestFilter.java)然后,我这个对象的初始化和存储在HTTP会话这个实例对象,
DbTest dbtest = new DbTest();
session.setAttribute("dbtest", dbtest);
我的问题是,有没有办法关闭连接对象会话过期时创建了吗?或者它会在到期时自动关闭?
我正在创建Connection对象并在类(DbTest)的构造函数中创建jdbc连接。会话过期时关闭jdbc连接对象
在另一个Java类(RequestFilter.java)然后,我这个对象的初始化和存储在HTTP会话这个实例对象,
DbTest dbtest = new DbTest();
session.setAttribute("dbtest", dbtest);
我的问题是,有没有办法关闭连接对象会话过期时创建了吗?或者它会在到期时自动关闭?
您可以实施HttpSessionListener
并在sessionDestroyed()
方法内进行清理。然而你的架构让我感到担忧。您不应该在HTTP会话中存储原始JDBC连接!
你不能HTTP会话迁移到另一台服务器
您可以轻松创建成千上万打开的数据库连接,HTTP会话是更轻便
的99.9%的时间你的数据库连接空闲
你不大可能处理连接超时和其他故障
有每个用户连接而不是连接池的原因吗?
你可以实现HttpSessionBindingListener。
'HttpSessionBindingListener':*使对象在与会话绑定或解除绑定时得到通知*。 OP希望在会话到期时得到通知*。 'HttpSessionListener'是一个更好的选择。 – 2012-03-15 13:42:07
使对象在与会话绑定或解除绑定时收到通知。该对象由HttpSessionBindingEvent对象通知。这可能是由于servlet程序员显式地从会话中解除了某个属性的结果,这是由于会话失效或由于会话超时而造成的。 – cjstehno 2012-03-15 16:58:08
您需要显式关闭连接对象。您可以在finalize方法中关闭集合,但不建议这样做,因为可能不会调用finalize。更好的方法是编写和调用将显式关闭此连接的方法。也不建议在构造函数中创建JDBC连接。
管理连接池,也可能是一个问题。要从连接池获得连接,您需要使用同步,这可以防止其他线程(客户端)访问连接池。
我明白了。 Plz在下面的链接中详细说明了我的问题,因为我无法在本文的评论部分添加足够的内容,http://stackoverflow.com/questions/9723270/making-jdbc-connection-and-storing-in-session – 2012-03-15 15:51:39