弹簧批对象创建

时间:2017-02-18 09:58:33

标签: spring spring-batch

我是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条记录时创建更少数量的对象

1 个答案:

答案 0 :(得分:0)

ItemReaderItemProcessor分别处理对象。但是,ItemWriter是使用碎片模式处理的,具有确认间隔的定义。

因此,如果确认间隔设置为500,则Spring Batch将存储已读取和/或已处理的项目,并在达到指示的数字时执行ItemWriter

从那时起,GC将消除这些对象。