我正在尝试一个make spring批处理工具,我将从一个位置读取文件并将它们转储到数据库中。我通过2种方式调用批处理作业,一种是从调度,另一种是从休息控制器。
我的批处理配置如下
@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控制器,从这里我调用作业任务
x一个一个一个一个x一个一个二个x
我的项目启动良好。但读/写的作业任务只有在我每次更改我的步骤名称(即步骤1--〉步骤2)或更改作业名称时才开始,这种情况只有在我从休息终点调用作业启动器时才会发生。项目启动,但不会调用作业任务,无论您击中休息终点多少次。但一旦您更改步骤名称或作业名称并重新启动项目,它开始工作,读写任务开始。如何纠正这一点,我必须改变作业示例每次调用HTTP。为此,我还提供了自定义线程池的taskExecutor。参考此documentation。
不知道我在这里做错了什么,请协助。
1条答案
按热度按时间m3eecexj1#
您可能正在启动一个已完成的作业,因此该作业不会启动。要再次启动同一作业,您可以添加一个具有唯一值的参数-
示例:
JobParametersBuilder jobParametersBuilder = new JobParametersBuilder(); jobParametersBuilder.addLong("startTime", System.currentTimeMillis());
然后将其作为参数传递给job。