分区的网格大小是否应该与Partitioner.partition()方法返回的Map的大小相同?
在我的spring batch分区场景中,有2个步骤。第一步确定要处理的记录总数,第二步(这是一个基于TaskExecutorPartitionHandler的分区步骤)以1000条为一批处理记录。
如果有20500条记录,则Partitioner.partition()方法返回的Map大小为21,需要执行21个并发步骤。这是否意味着在这种情况下分区的网格大小应该是21?
如果要处理的记录总数每天都在变化,该怎么办?在第一步完成后,如何在运行时分配分区的网格大小?
发布于 2016-06-21 07:35:36
看起来第一步可以将网格大小存储在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>https://stackoverflow.com/questions/37928662
复制相似问题