在Spring批次的Step配置中调用Stored Procedure
Call Stored Procedure in the Step configuration of Spring batch
我正尝试在 spring 批处理中构建作业以执行以下操作:
- 读取 CSV 文件
- 将 CSV 文件转储到 table
- 调用存储过程执行一些操作
我可以为前两点编写逻辑,但不确定如何调用存储过程?
另外,这个过程应该在前两点完成后调用,所以认为这应该在另一个步骤中。
根据我的假设,我应该有这样的工作配置:
@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。
我正尝试在 spring 批处理中构建作业以执行以下操作:
- 读取 CSV 文件
- 将 CSV 文件转储到 table
- 调用存储过程执行一些操作
我可以为前两点编写逻辑,但不确定如何调用存储过程? 另外,这个过程应该在前两点完成后调用,所以认为这应该在另一个步骤中。
根据我的假设,我应该有这样的工作配置:
@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。