Spring批处理中的网格大小

时间:2011-10-13 19:06:51

标签: java spring spring-batch

我有批处理作业,它从批量文件中读取数据,处理它并插入数据库。

我使用默认分区处理程序使用spring的分区功能。

    <bean class="org.spr...TaskExecutorPartitionHandler">
          <property name="taskExecutor" ref="taskExecutor"/>
          <property name="step" ref="readFromFile" />
          <property name="gridSize" value="10" />
    </bean>

这里gridSize有什么意义?我已经以这样的方式配置它等于taskExecutor中的并发性。

3 个答案:

答案 0 :(得分:5)

gridSize指定要创建的data blocks的数量(通常)workers的相同数量。将其视为map / reduce中的多个映射数据块。

使用StepExecutionSplitter,根据数据,PartitionHandler“分区”/将数据拆分为gridSize部分,并将每个部分发送给独立的工作人员=&gt;在你的情况下thread

例如,DB中有10行需要处理。如果您将gridSize设置为 5 ,并且您使用的是简单的分区逻辑,那么每个线程最终会得到10/5 = 2行=&gt; 5 线程同时在两行上运行。

答案 1 :(得分:2)

根据API,

  

传递给中的StepExecutionSplitter   handle(StepExecutionSplitter,StepExecution)方法,指示它   理想情况下,需要多少个StepExecution实例。该   允许StepExecutionSplitter忽略大小写中的网格大小   重启,因为必须保留输入数据分区。

答案 2 :(得分:0)

网格大小只是一组任务(假设为一袋袋),单个分区步骤将被提升以进行处理。完成所有任务(袋装袋)之后,它将返回下一组任务(袋装袋)。