如何在Spring中管理hibernate会话

时间:2014-06-09 10:34:30

标签: java spring hibernate tomcat hibernate-session

我遇到会话问题,关闭运行此应用程序时会产生什么影响,以及如果生产中有什么影响。

我在我的生产服务器中面临两个问题,它在应用程序使用期间消耗大量内存,只需启动800MB左右。

一段时间后,它会出现内存错误并导致服务器崩溃

我正在使用tomcat服务器来部署我的应用程序

我的代码就是这个

@Transactional
public Collection list(String queryString, Object[] value) throws Exception {
  Session session = this.sessionFactory.getCurrentSession();
  Query query = session.createQuery(queryString);
  return query.list();
}

@Transactional
public Collection list(String queryString, Object[] value) throws Exception {
  Session session = this.sessionFactory.openSession();
  Query query = session.createQuery(queryString);
  return query.list();
}

如果我关闭会话,那么延迟初始化会给会话已经关闭的错误。

请帮我解决这个问题。 我们如何通过spring配置来关注hibernate中的open会话 我正在使用hibernate 3.6.1和spring 3.0.6。

1 个答案:

答案 0 :(得分:1)

将VM参数添加到服务器以避免outofmemory错误

-Xms256m -Xmx1024m -XX:+DisableExplicitGC -Dcom.sun.management.jmxremote
-XX:PermSize=256m -XX:MaxPermSize=512m

并添加

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

代码上面的方法严格处理事务而不用担心Session对象