首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring batch partitioning:在运行时设置网格大小

Spring batch partitioning:在运行时设置网格大小
EN

Stack Overflow用户
提问于 2016-06-21 01:42:09
回答 1查看 1.2K关注 0票数 0

分区的网格大小是否应该与Partitioner.partition()方法返回的Map的大小相同?

在我的spring batch分区场景中,有2个步骤。第一步确定要处理的记录总数,第二步(这是一个基于TaskExecutorPartitionHandler的分区步骤)以1000条为一批处理记录。

如果有20500条记录,则Partitioner.partition()方法返回的Map大小为21,需要执行21个并发步骤。这是否意味着在这种情况下分区的网格大小应该是21?

如果要处理的记录总数每天都在变化,该怎么办?在第一步完成后,如何在运行时分配分区的网格大小?

EN

回答 1

Stack Overflow用户

发布于 2016-06-21 07:35:36

看起来第一步可以将网格大小存储在jobExecutionContext中

代码语言:javascript
复制
ExecutionContext jobExecutionContext =
chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext();

jobExecutionContext.putInt("gridSize", 21); 

稍后可以将其注入PartitionHandler中。

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37928662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档