Spring批处理作业未从HTTP Rest调用启动

cclgggtu  于 2023-01-29  发布在  Spring
关注(0)|答案(1)|浏览(163)

我正在尝试一个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
不知道我在这里做错了什么,请协助。

m3eecexj

m3eecexj1#

您可能正在启动一个已完成的作业,因此该作业不会启动。要再次启动同一作业,您可以添加一个具有唯一值的参数-
示例:
JobParametersBuilder jobParametersBuilder = new JobParametersBuilder(); jobParametersBuilder.addLong("startTime", System.currentTimeMillis());
然后将其作为参数传递给job。

相关问题