我希望能够使用 REST 控制器开始我的工作,然后当工作开始时,它应该按计划运行,直到我再次使用 REST 停止它。
所以这是我的控制器:
@RestController
public class LauncherController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
@RequestMapping("/launch")
public String launch() throws Exception {
...
jobLauncher.run(job, jobParameters);
}
这是 Batch conf 的一部分:
@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchConfiguration {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Scheduled(cron = "0/5 * * * * ?")
@Bean
public Job job() {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.flow(step1())
.end()
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Person, Person> chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
我还设置了属性 spring.batch.job.enabled=false,因为我不希望作业在 Spring Boot App 启动时立即运行。
现在我可以调用我的 Rest api lauch,并且作业运行,但只有一次。调度程序不工作。而且我无法弄清楚我应该在哪里定义我的@Scheduled Annotation ..
原文由 akcasoy 发布,翻译遵循 CC BY-SA 4.0 许可协议
我会以某种方式处理它,计划的作业始终运行,但它仅在标志设置为 true 时才执行某些操作:
和一个控制器: