分区的网格大小是否应与Partitioner.partition()方法返回的Map大小相同?
在我的春季批处理分区方案中,有两个步骤。第一步标识要处理的记录总数,第二步(基于TaskExecutorPartitionHandler的分区步骤)以1000个批次处理记录。
如果有20500条记录,Partitioner.partition()方法返回的Map大小为21,则需要执行21个并发步骤。这是否意味着在这种情况下分区的网格大小应该是21?
如果要处理的记录总数每天更改怎么办?如何在第一步完成后在运行时分配分区的网格大小?
答案 0 :(得分:0)
看起来第一步可以在jobExecutionContext中存储网格大小
ExecutionContext jobExecutionContext =
chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext();
jobExecutionContext.putInt("gridSize", 21);
以后可以将它注入PartitionHandler。
<job id="testJob" xmlns="http://www.springframework.org/schema/batch">
<step id="firstStep" next="secondStep.master">
<tasklet ref="firstTasklet"/>
</step>
<step id="secondStep.master">
<partition partitioner="partitioner" handler="taskExecutorPartitionHandler"/>
</step>
</job>
<bean id="taskExecutorPartitionHandler" class="org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler" scope="step">
<property name="taskExecutor" ref="threadPoolTaskExecutor"/>
<property name="step" ref="secondStep.slave" />
<property name="gridSize" value="#{jobExecutionContext['gridSize']}" />
</bean>