Spring batch 在spring批处理中使用带命名参数的JdbcTemplate
我试图在spring批处理中向查询传递一个参数。我决定创建一个tasklet并使用JdbcTemplate,如下所示Spring batch 在spring批处理中使用带命名参数的JdbcTemplate,spring-batch,jdbctemplate,Spring Batch,Jdbctemplate,我试图在spring批处理中向查询传递一个参数。我决定创建一个tasklet并使用JdbcTemplate,如下所示 public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws EpsilonBatchBusinessException { LOGGER.debug("Enter execute."); JdbcTemplate
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext)
throws EpsilonBatchBusinessException {
LOGGER.debug("Enter execute.");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.query(queryString,
new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setInt(1, runNumber);
}
},
rowMapper);
LOGGER.debug("Exit execute.");
return RepeatStatus.FINISHED;
}
因此,我向这个bean注入了一个数据源、queryString、rowMapper对象和参数(runNumber)。。将在创建列表的步骤中调用此tasklet。我通常将行映射器传递给JdbcCursorItemReader Springbean,不会编写tasklet,但我的查询字符串需要一个参数,因此我正在编写这个tasklet。我只是不确定这个tasklet是否会像JdbcCursorItemReader那样发挥作用?欢迎您的输入一个更好的选择是使用
JdbcCursorItemReader
并编写一个自定义的
PreparedStatementSetter
界面非常简单;您需要编写的几乎所有代码都在下面。一旦编写了setter,您需要做的就是将其配置为一个新bean,并在配置中注入runNumber
值,然后将该bean注入JdbcCursorItemReader
。这允许您使用所有常用的ItemReader
s和itemrwriter
s,而不必在Tasklet
中手动实现所有功能
package com.foo;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.jdbc.core.PreparedStatementSetter;
public class YourParamSetter implements PreparedStatementSetter {
private int runNumber;
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, runNumber);
}
public void setRunNumber(int runNumber) {
this.runNumber = runNumber;
}
public int getRunNumber() {
return runNumber;
}
}