spring 批量条件 if 步骤
spring batch conditional if step
Spring 批处理文档很好地解释了如何使用以下模式的步骤正确定义作业:
call Step 1
if (some condition determined by a Decider) {
call Step 2
} ELSE {
call Step 3
}
但是,我正在尝试在 Java 配置中实现此目的:
call Step 1
if (some condition determined by a decider) {
call step 2
}
call step 3
call step 4
.. so on and so forth ..
而且我认为我可能误读了 API 因为我似乎无法让条件 IF 逻辑按预期运行 - 所有发生的事情都是当决策程序评估为 True 它运行第 2 步,但从不运行第 3 步 .. 当然,当决策者评估为 false 时,它只运行第 3 步。有人有任何示例说明如何在 Java 配置中执行此类条件步骤吗?
你应该定义你的决策者,因为你有两个选择。
实现 JobExecutionDecider
或定义 bean
的 class,如上例所示:
@Bean
public JobExecutionDecider decider() {
return (JobExecution jobExecution, StepExecution stepExecution) -> {
// write code here
boolean someCondition = true;
return someCondition ? new FlowExecutionStatus("COMPLETED") : new FlowExecutionStatus("FAILED");
};
}
之后,您可以像这样使用此决策程序定义流程:
@Bean
public Job job() {
return jobBuilderFactory.get("job").incrementer(new RunIdIncrementer()).start(step1()).next(decider())
.on("COMPLETED").to(step2()).from(decider()).on("FAILED").to(step3()).end().build();
}
带有步骤的作业的完整定义应如下所示:
@Configuration
public class MJob {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job job() {
return jobBuilderFactory.get("job").incrementer(new RunIdIncrementer()).start(step1()).next(decider())
.on("COMPLETED").to(step2()).from(decider()).on("FAILED").to(step3()).end().build();
}
@Bean
public JobExecutionDecider decider() {
return (JobExecution jobExecution, StepExecution stepExecution) -> {
// write code here
boolean someCondition = true;
return someCondition ? new FlowExecutionStatus("COMPLETED") : new FlowExecutionStatus("FAILED");
};
}
public Step step1() {
return stepBuilderFactory.get("step1").tasklet(new Step1()).build();
}
public Step step2() {
return stepBuilderFactory.get("step2").tasklet(new Step2()).build();
}
public Step step3() {
return stepBuilderFactory.get("step3").tasklet(new Step3()).build();
}
}
这是否回答了您的问题?
Spring 批处理文档很好地解释了如何使用以下模式的步骤正确定义作业:
call Step 1
if (some condition determined by a Decider) {
call Step 2
} ELSE {
call Step 3
}
但是,我正在尝试在 Java 配置中实现此目的:
call Step 1
if (some condition determined by a decider) {
call step 2
}
call step 3
call step 4
.. so on and so forth ..
而且我认为我可能误读了 API 因为我似乎无法让条件 IF 逻辑按预期运行 - 所有发生的事情都是当决策程序评估为 True 它运行第 2 步,但从不运行第 3 步 .. 当然,当决策者评估为 false 时,它只运行第 3 步。有人有任何示例说明如何在 Java 配置中执行此类条件步骤吗?
你应该定义你的决策者,因为你有两个选择。
实现 JobExecutionDecider
或定义 bean
的 class,如上例所示:
@Bean
public JobExecutionDecider decider() {
return (JobExecution jobExecution, StepExecution stepExecution) -> {
// write code here
boolean someCondition = true;
return someCondition ? new FlowExecutionStatus("COMPLETED") : new FlowExecutionStatus("FAILED");
};
}
之后,您可以像这样使用此决策程序定义流程:
@Bean
public Job job() {
return jobBuilderFactory.get("job").incrementer(new RunIdIncrementer()).start(step1()).next(decider())
.on("COMPLETED").to(step2()).from(decider()).on("FAILED").to(step3()).end().build();
}
带有步骤的作业的完整定义应如下所示:
@Configuration
public class MJob {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job job() {
return jobBuilderFactory.get("job").incrementer(new RunIdIncrementer()).start(step1()).next(decider())
.on("COMPLETED").to(step2()).from(decider()).on("FAILED").to(step3()).end().build();
}
@Bean
public JobExecutionDecider decider() {
return (JobExecution jobExecution, StepExecution stepExecution) -> {
// write code here
boolean someCondition = true;
return someCondition ? new FlowExecutionStatus("COMPLETED") : new FlowExecutionStatus("FAILED");
};
}
public Step step1() {
return stepBuilderFactory.get("step1").tasklet(new Step1()).build();
}
public Step step2() {
return stepBuilderFactory.get("step2").tasklet(new Step2()).build();
}
public Step step3() {
return stepBuilderFactory.get("step3").tasklet(new Step3()).build();
}
}
这是否回答了您的问题?