我正在创建一个Connection对象并在类的构造函数(DbTest)中建立jdbc连接。
然后在另一个java类(RequestFilter.java)中,我正在初始化此对象并将此实例对象存储在HTTP Session中,
DbTest dbtest = new DbTest();
session.setAttribute("dbtest", dbtest);
我的问题是,有没有办法关闭会话到期时创建的连接对象?或者它会在到期后自动关闭吗?
答案 0 :(得分:4)
您可以实施HttpSessionListener
并在sessionDestroyed()
方法内进行清理。但是你的架构让我担心。您不应该在HTTP会话中存储原始JDBC连接!
您无法将HTTP会话迁移到其他服务器
您可以轻松创建数千个开放式数据库连接,HTTP会话更轻量级
99.9%的数据库连接空闲时间
您可能无法处理连接超时和其他故障
是否有每个用户而不是连接池建立连接的原因?
答案 1 :(得分:0)
您可以实现HttpSessionBindingListener。
答案 2 :(得分:0)
您需要显式关闭连接对象。您可以在finalize方法中关闭集合,但不建议不要调用finalize。更好的方法是编写和调用方法,它将明确地关闭此连接。建议不要在构造函数中创建JDBC连接。
答案 3 :(得分:0)
管理连接池也可能是个问题。要从连接池获取连接,您需要使用同步,这会阻止其他线程(客户端)访问连接池。