我是Spring批处理的新手。我需要开发一个Spring批处理应用程序,它从csv文件中读取1,00,000条记录。我已经开发了一个如下所示的弹簧批量应用程序。
<job id="hellojob" xmlns="http://www.springframework.org/schema/batch">
<step id="orderprocessor">
<tasklet allow-start-if-complete="true">
<chunk reader="reader" writer="writer" commit-interval="500" skip-limit="2">
<skippable-exception-classes>
<include class="org.springframework.batch.item.file.FlatFileParseException" />
</skippable-exception-classes>
</chunk>
</tasklet>
</step>
</job>
此外,我将字段集映射器类设为
public class OrderDataMapper implements FieldSetMapper<Product> {
@Override
public Order mapFieldSet(FieldSet fieldSet) throws BindException {
Product product = new Product();
order.setCustId(fieldSet.readString(0));
order.setOrderNum(fieldSet.readString(1));
order.setCountry(fieldSet.readString(2));
return product;
}
}
根据我的理解,每个记录都会调用上面的字段集映射器类,每次创建一个新对象。因此,对于1,00,000条记录,它将创建1,00,000个对象。
我觉得这些是jvm要处理的大量对象,并且不能用于垃圾收集,因为所有内容都在单个上运行 线。
请告诉我有没有办法可以在迭代1,00,000条记录时创建更少数量的对象
答案 0 :(得分:0)
ItemReader
和ItemProcessor
分别处理对象。但是,ItemWriter
是使用碎片模式处理的,具有确认间隔的定义。
因此,如果确认间隔设置为500,则Spring Batch将存储已读取和/或已处理的项目,并在达到指示的数字时执行ItemWriter
。
从那时起,GC将消除这些对象。