我正在使用spring batch patitioning来运行一个作业的多个线程 . 该作业应该从数据库中读取,处理数据并将结果写入数据库文件,下面是我当前的工作配置 .
<step id="masterStep">
<partition step="slave" partitioner="rangePartitioner">
<handler grid-size="10" task-executor="taskExecutor" />
</partition>
</step>
</job>
<!-- Jobs to run -->
<step id="slave" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk reader="pagingItemReader" writer="flatFileItemWriter"
processor="itemProcessor" commit-interval="1" />
</tasklet>
</step>
使用此配置,当作业运行时,作业的10个线程启动,这也意味着使用10个读取器,这意味着每个记录将被处理10次,使得分区无用 .
你能帮助解决一个只对处理器和阅读器进行分区的解决方案,这样我们就可以拥有处理器和编写器的多个线程,并只使用一个阅读器实例
1 回答
如果没有为您的阅读器配置,很难给您一个确切的解决方案,但我的赌注是您没有将范围值注入您的查询 . 下面是在远程分区作业中使用
JdbcPagingItemReader
的示例 . 您会注意到正在读取的项目范围由stepExecutionContext
提供 . 这些是分区程序提供的值 . 每个ItemReader
都会获得自己的值 .您可以在YouTube上关于远程分区的更多信息了解这一点:https://www.youtube.com/watch?v=CYTj5YT7CZU该话题的代码如下:https://github.com/mminella/Spring-Batch-Talk-2.0