Spring-Batch / JPA:在阅读器,处理器和编写器之间共享持久性上下文

时间:2014-11-06 13:07:59

标签: java hibernate jpa spring-batch entitymanager

我们正在使用批量处理的Web应用程序。

我们正面临着表演问题。我们使用的是Spring批处理和JPA(使用hibernate实现),但没有使用EJB。

目前我们使用HibernateCursorItemReader加载数据,使用JPAItemWriter进行更新。

我正在寻找最佳模式来优化我们的批次。我已经看过许多讨论和文档,其中人们没有使用扩展持久化上下文来解决许多问题,例如获取OutOfMemory错误,非线程安全对象......

但在我们的例子中,我们讨论批处理,因此一次只能有一个持久化上下文。我们计划在每个块之后刷新并清除EntityManager,它将逐个保持项目(提交大小= 1)。

所以我不明白为什么不为阅读器,处理器和编写器只使用一个持久化上下文。这个想法是它可以避免许多选择(每个项目至少有一个)在读取器和编写器之间重新附加分离的项目(这样EntityManager可以合并而不进行另一个选择)。

所以我想知道你是否会对这种模式有所建议。

还有如何正确实现它,因为它不是Spring Batch的defaut行为。实际上,我们必须覆盖持久化上下文属性,该属性对于Web应用程序是Transactional,并注入@PersistenceContext注释。

编辑:我忘了说我们在Tomcat 7服务器上

0 个答案:

没有答案