Spring 批处理作业不会从 HTTP Rest 调用开始



我正在尝试制作一个春季批处理实用程序,其中我将从一个位置读取文件并将它们转储到数据库中。我通过两种方式调用批处理作业,一种来自调度,另一种来自rest控制器。

我的批量配置在

下面
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Bean
public SomeReader<Some> reader() {
// some reader configuration
return reader;
}
@Bean
public SomeProcessor processor() {
return new SomeProcessor();
}
@Bean
public SomeWriter<Person> writer() {
// some config
return writer;
}
@Bean
public Job someJob() {
return jobBuilderFactory.get("someJob")
.flow(step1())
.end()
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Some, Some> chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.taskExecutor(new SimpleAsyncTaskExecutor())
.build();
}
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(3);
threadPoolTaskExecutor.setThreadNamePrefix("ImportPoolThread-Utility");
return threadPoolTaskExecutor;
}
}

我的rest控制器,我从那里调用作业任务

@RestController
public class JobInvokerController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
@RequestMapping("/invokejob")
public String handle() throws Exception {
JobParameters jobParameters = new JobParametersBuilder().toJobParameters();
jobLauncher.run(job, jobParameters);
return "Task Batch job has been invoked.";
}
}
spring.batch.job.enabled=false

我的项目开始得很好。但是读/写的作业任务只有在我每次更改我的步骤名称时才开始,即step1—>step2或做作业名称更改,这只有在我从休息端点调用作业启动器时才会发生。项目开始,但是不管你多少次到达休息结束点,都不会调用工作任务。但是,一旦更改步骤名称或作业名称并重新启动项目,它就会开始工作,并开始读写任务。如何纠正这一点,我是否必须每次从HTTP调用更改作业实例。为此,我还为taskExecutor提供了自定义线程池。参考此文档。

不知道我哪里做错了,请帮助我。

您可能正在启动一个已经完成的工作,因此它不会启动。要再次启动相同的作业,您可以添加一个具有唯一值的参数-

的例子:

JobParametersBuilder jobParametersBuilder = new JobParametersBuilder(); jobParametersBuilder.addLong("startTime", System.currentTimeMillis());

然后将其作为参数传递给作业。

最新更新