1

我对会话关闭有疑问,在运行此应用程序期间会产生什么影响,以及如果这在生产中会怎样。

我在生产服务器中遇到了两个问题,它在应用程序使用期间消耗了大量内存,大约 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 中处理打开会话我使用的是 hibernate 3.6.1 和 spring 3.0.6。

4

1 回答 1

1

向服务器添加 VM 参数以避免内存不足错误

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

并添加

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

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

于 2014-06-09T10:38:30.717 回答