如何解决Step ExecutionContext 未在 Spring Cloud Data Flow 上使用 Spring Cloud Task 提升
我使用 Spring Cloud Data Flow 和 Spring Cloud Task 成功部署了一个远程分区作业;安装是基于Kubernetes的,所以我在项目中加入了Spring Cloud Deployer的Kubernetes实现。
但似乎不可能将值从工作程序的步骤执行上下文传播到作业执行上下文。
worker tasklet 将一些数据写入 step 执行上下文,成功保存在“BATCH_STEP_EXECUTION_CONTEXT”表中:
@Bean
public tasklet workertasklet() {
return new tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution,ChunkContext chunkContext) throws Exception {
ExecutionContext executionContext = chunkContext.getStepContext()
.getStepExecution()
.getExecutionContext();
Integer partitionNumber = executionContext.getInt("partitionNumber");
System.out.println("This tasklet ran partition UPD1: " + partitionNumber);
executionContext.put(RESULT_PREFIX+partitionNumber,"myResult "+partitionNumber);
return RepeatStatus.FINISHED;
}
};
}
有一个 ExecutionPromotionListener,它是在 Step 构建过程中添加的:
@Bean
public StepExecutionListener promotionListener() {
ExecutionContextPromotionListener listener = new
ExecutionContextPromotionListener();
listener.setKeys(new String[] {"result0","result1","result2","result3"});
return listener;
}
@Bean
public Step workerStep() {
return this.stepBuilderFactory.get("workerStep")
.tasklet(workertasklet())
.listener(promotionListener())
.build();
}
作业成功完成,工作正确分区并由 4 个 Kubernetes pod 执行:
但预期值不存在于 BATCH_JOB_EXECUTION_CONTEXT 表中。
Conversley,步骤执行上下文传播适用于非云环境中的分区作业,例如使用 TaskExecutorPartitionHandler。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。