在Spring批次的Step配置中调用Stored Procedure

Call Stored Procedure in the Step configuration of Spring batch

我正尝试在 spring 批处理中构建作业以执行以下操作:

我可以为前两点编写逻辑,但不确定如何调用存储过程? 另外,这个过程应该在前两点完成后调用,所以认为这应该在另一个步骤中。

根据我的假设,我应该有这样的工作配置:

@Bean
    public Job job(){
        return jobBuilderFactory.get("job")
                .start(step1())  --> To read and write CSV file
                .next(step2())   --> To call SP
                .incrementer(new RunIdIncrementer())
                .build();
    }

下面是我的步骤配置:

在这一步中,我一次从 csv 中读取 1000 个 Provider 对象并将其转储到 table 中。这按预期工作。

@Bean
    public Step step1(){
        return stepBuilderFactory.get("step1")
                .<Provider, Provider>chunk(1000)
                .reader(batchItemReader.providerMultiResourceItemReader())
                .writer(batchItemWriter.providerJdbcBatchItemWriter())
                .build();
    }

要调用存储过程:SP_UpdateTemp,我想包括 step2() 但现在确定该怎么做? 在这个 SP 中,我正在读取第一个 table 的记录并在另一个 table.

上执行一些更新
@Bean
    public Step step2(){
        return stepBuilderFactory.get("step2")
                //call procedure

    }

您的第 2 步可以是一个简单的 tasklet 步骤,它使用 JdbcTemplate 调用存储过程,例如:

@Bean
public Step step2() {
    return stepBuilderFactory.get("step2")
            .tasklet((contribution, chunkContext) -> {
                // call stored procedure
                jdbcTemplate.update("call SOME_PROC (?, ?)", param1, param2);
                return RepeatStatus.FINISHED;
            })
            .build();
}

有关使用 JdbcTemplate 调用存储过程的更多详细信息,请参阅 Spring JDBC Template for calling Stored Procedures