【发布时间】:2015-06-13 22:21:14
【问题描述】:
目前,对于我的项目,我正在为每个与数据库相关的查询创建会话并立即关闭它。
public Address address(Contact contact) {
Address result = null;
Session session=factory.openSession();
try{
result = contact.getAddress();
} finally {
session.close();
}
return result;
}
在一个网页的单线程执行中,在java代码和JSP代码中有很多类似上面的调用。
另外,我有一个 java 任务在它自己的执行调用的线程中,需要打开一个会话并在同一个线程中关闭它。
出于某种原因,有时我会遇到会话超时,只有一个用户登录我的应用程序,并且后台运行了 10 个线程。
问题是......我应该在执行整个页面之前在过滤器中创建一个会话并在所有与数据库相关的方法中调用 factory.getCurrentSession() 吗?如果我在过滤器中处理请求后关闭过滤器中的会话,这将是线程安全的吗?这种方法是否会使应用程序具有可扩展性并防止会话超时?
【问题讨论】:
标签: java multithreading hibernate session