【发布时间】:2019-10-20 01:24:23
【问题描述】:
我在使用 Spring Batch 作业读取大型 XML 文件(几百万条记录)并将记录从中保存到数据库时遇到问题。该作业使用 100 个元素的块,MultiResourceItemReader 用于读取 XML,ItemProcessor 用于处理的记录,ItemWriter 用于使用 JPA 和EntityManager 将记录写入数据库。问题是,当调用持久操作时,作业以OutOfMemoryError 结束(我尝试评论 writer 阶段,但问题没有发生)。
public class MyClassWriter implements ItemWriter<MyObject> {
@Autowired
private MyDelegate delegate;
@Override
public void write(List<? extends MyObject> items) throws Exception {
...
List<MyObject> foos2 = (List<MyObject>)(List<?>)items;
delegate.setInsert(foos2);
...
}
和
public void setInsert(List<MyObject> list) {
for (MyObject el : list) {
em.persist(el);
}
em.flush();
em.clear(); //I tried to call clear operation too, but not solved problem
}
对我有什么建议吗?
【问题讨论】:
-
您使用哪个
ResourceAwareItemReaderItemStream<T>作为MultiResourceItemReader的代表?
标签: spring hibernate jpa out-of-memory spring-batch