У меня была проблема с заданием Spring Batch для чтения большого XML-файла (несколько миллионов записей) и сохранения записей из него в базе данных.В задании используется блок из 100 элементов и MultiResourceItemReader
для чтения XML, ItemProcessor
для обработанных записей и ItemWriter
для записи записей в базу данных с использованием JPA и EntityManager
.Проблема заключается в том, что при сохранении операции вызова задание заканчивается на OutOfMemoryError
(я пытался комментировать этап записи, и проблема не возникает).
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
}
Любое предложение для меня?