如何解决Spring Batch-工人步骤执行上下文与数据库中的上下文不匹配
我已经实现了带有管理器步骤的远程分区,该管理器步骤需要在两个工作线程中处理2个文件。
作业的最后一步(管理器)是一个tasklet,它遍历jobExecution.stepExecutions()并查找特定步骤名称的写入/读取计数。
我遇到的问题是,当BATCH_STEP_EXECUTION表保留在数据库(mysql)中时,工作程序步骤的上下文与我期望的对齐,而从Java代码中的对象提取的上下文为空(读/写count为0),我也尝试将这些值添加到stepExecutionContext中,但上下文仍然仅包含具有文件路径的分区键。
这是我的工作步骤
@Bean
public Step mainWorkerStep() {
return this.remotePartitioningWorkerStepBuilderFactory
.get(STEP_NAME_MAIN_WORKER)
.inputChannel(requests())
.listener(switchDataSourceListener)
.<IntegrityReport,IntegrityReport>chunk(integrityJobPropertyHolder.getStagingWriterChunkSize())
.reader(integrityReportReaderConfig)
.writer(integrityReportWriterConfig)
.listener(partitionImportSummaryListener)
.build();
}
这是经理步骤
@Bean
public Step loadDataManagerStep() {
return remotePartitioningManagerStepBuilderFactory
.get(STEP_NAME_LOAD_DATA_MANAGER)
.partitioner(STEP_NAME_MAIN_WORKER,batchCommonMultiResourcePartitioner)
.gridSize(10)
.timeout(30 * 60 * 1000) // 30 minutes
.pollInterval(10000) // 10 seconds
.outputChannel(outboundRequests())
.build();
}
从下面的屏幕快照中可以看到,数据库中的状态为“正在启动”,而状态为“已完成”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。