У меня есть 3 шага A, B, C, которые должны выполняться в последовательности A-> B-> C, где B является необязательным. Я должен выполнить шаг B только на основе какого-то условия. Я использую JobExecutionDecider решить следующим образом:Идентификация и выполнение этапа spring-batch (java-config) с использованием JobExecutionDecider
@Bean(name = "decider")
JobExecutionDecider isStepRequired {
return new JobExecutionDecider() {
@Override
public FlowExecutionStatus decide(final JobExecution jobExecution, final StepExecution stepExecution) {
if (condition not satisfied) {
// return status to skip step B and go to step C
return FlowExecutionStatus.COMPLETED;
}
// return status to proceed with step B
return new FlowExecutionStatus("CONTINUE");
}
};
}
и в конфигурации задания, у меня есть следующий фрагмент кода,
@Bean
Job constructJob(final JobBuilderFactory jobs, final Step a, final Step b, final JobExecutionDecider decider, final Step c) {
final JobBuilder jobBuilder = jobs.get("Job");
final JobFlowBuilder builder = jobBuilder.flow(a);
builder.from(a).next(decider);
builder.from(decider).on("CONTINUE").to(b).next(c);
builder.from(decider).on("*").to(c);
return builder.build().build();
и выше код работает, как я ожидал. Но я не уверен, что это правильный способ сделать это. В основном я ожидаю, что не повторить выполнение шага C.
Я столкнулся с SimpleAsyncTaskExecutor, но я понял, что он используется в сценарии, где нам нужно выполнять параллельную обработку, и в моем случае мне просто нужно выполнить шаг, если условие удовлетворяет.
Мои вопросы: 1. Могу ли я достичь того, чего хочу, используя SimpleAsyncTaskExecutor? Есть ли пример использования SimpleAsyncTaskExecutor с помощью аннотации? 2. Есть ли другой лучший способ сделать то, что я сделал, где я могу избежать вышеупомянутого дублирования?
Любая помощь действительно оценена!
Спасибо заранее, Dhinesh Kumar P
Хотя я не знаю об SimpleAsyncTaskExecutor, я нашел эти альтернативы: [потоков] (http://stackoverflow.com/a/32362705/2375586) и [обходные пути] (http://stackoverflow.com/ а/33267011/2375586) – jmmut