Play Framework 1.2.4:批量插入作业后关闭或断开会话?

时间:2012-07-05 08:19:50

标签: hibernate jdbc playframework bulkinsert

我正在开发一个play 1.2.4项目,我有4个作业间隔运行,从大量数据(从webservice)获取并将它们保存到数据库。

我目前的批量插入方法是这样的:

      org.hibernate.Session session = 
            (org.hibernate.Session)MyEntityModel.em().getDelegate(); 
  Transaction tx = session.beginTransaction();
  int i = 0;
  for(Sales obj:sales)
      {
            convertToModelAndSave(obj);
          i++;
          if(i%100==0)
          {
              tx.commit();
              session.flush();
              session.clear();
              tx=session.beginTransaction();
          }
      }
  session.disconnect();

我只是在工作完成后断开会话。

我想知道这对我来说是否足够,我是否真的需要断开会话(这使我在程序中有例外)。断开连接后我的数据库连接池是否会被释放?

1 个答案:

答案 0 :(得分:1)

另一种方法是将你的工作分成两份工作。

  • 第一个作业是主要作业,它将您的数据分成100个项目
  • 第二个拿一些物品保存

然后你的第一个工作调用第二个工作,你不必在你的代码中放入与hibernate相关的代码。

另一个优点:如果您在保存100个项目时进行回滚,那么您的主要作业可以通过在这种情况下逐个保存项目来重试,以避免因错误而丢失100个项目

在这种情况下,您也可以并行启动多个子作业以加快速度

相关问题