如何触发计划的春季批处理作业?
2022-09-05 00:29:25
我希望能够使用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注释。