我有批处理作业,它从批量文件中读取数据,处理它并插入数据库。
我使用默认分区处理程序使用spring的分区功能。
<bean class="org.spr...TaskExecutorPartitionHandler">
<property name="taskExecutor" ref="taskExecutor"/>
<property name="step" ref="readFromFile" />
<property name="gridSize" value="10" />
</bean>
这里gridSize
有什么意义?我已经以这样的方式配置它等于taskExecutor中的并发性。
答案 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)
网格大小只是一组任务(假设为一袋袋),单个分区步骤将被提升以进行处理。完成所有任务(袋装袋)之后,它将返回下一组任务(袋装袋)。