Step ExecutionContext не продвигается с помощью Spring Cloud Task в Spring Cloud Data Flow
Я успешно развернул удаленное секционированное задание, используя Spring Cloud Data Flow и Spring Cloud Task; установка основана на Kubernetes, поэтому я добавил в проект Kubernetes-реализацию Spring Cloud Deployer.
Но кажется, что невозможно передать значения из контекста выполнения шага работника в контекст выполнения задания.
Рабочий тасклет записывает некоторые данные в контекст выполнения шага, который успешно сохраняется в таблице «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 , который добавляется в процессе создания шага:
@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:
Но ожидаемые значения отсутствуют в таблице BATCH_JOB_EXECUTION_CONTEXT.
Конверсли, распространение контекста выполнения шага работает с секционированным заданием в необлачной среде, например, с помощью TaskExecutorPartitionHandler .