JdbcCursorItemReader 是否必须关闭连接?
Does JdbcCursorItemReader have to close connection?
有一个示例来自 Spring 批处理文档 (https://docs.spring.io/spring-batch/docs/4.2.x/reference/html/readersAndWriters.html#cursorBasedItemReaders)
public ItemReader<RevertedBillCredit> verifyCreditReader() {
JdbcCursorItemReader itemReader = new JdbcCursorItemReader();
itemReader.setDataSource(dataSource);
itemReader.setSql("SELECT ID, NAME, CREDIT from CUSTOMER");
itemReader.setRowMapper(new CustomerCreditRowMapper());
int counter = 0;
ExecutionContext executionContext = new ExecutionContext();
itemReader.open(executionContext);
Object customerCredit = new Object();
while(customerCredit != null){
customerCredit = itemReader.read();
counter++;
}
itemReader.close();
}
我发现有些文档说JdbcCursorItemReader会在查询后自动关闭连接。但是,为什么我们在这里需要 itemReader.close() 呢?
JdbcCursorItemReader 是否必须手动关闭连接?
您链接的参考文档中的片段解释了幕后的工作原理,但是当 reader 在面向块的步骤中使用时,您不需要调用 open/close
方法你自己,Spring批处理就可以了。所以你的项目 reader bean 定义应该是这样的:
public ItemReader<RevertedBillCredit> verifyCreditReader() {
JdbcCursorItemReader itemReader = new JdbcCursorItemReader();
itemReader.setDataSource(dataSource);
itemReader.setSql("SELECT ID, NAME, CREDIT from CUSTOMER");
itemReader.setRowMapper(new CustomerCreditRowMapper());
return itemReader;
}
有一个示例来自 Spring 批处理文档 (https://docs.spring.io/spring-batch/docs/4.2.x/reference/html/readersAndWriters.html#cursorBasedItemReaders)
public ItemReader<RevertedBillCredit> verifyCreditReader() {
JdbcCursorItemReader itemReader = new JdbcCursorItemReader();
itemReader.setDataSource(dataSource);
itemReader.setSql("SELECT ID, NAME, CREDIT from CUSTOMER");
itemReader.setRowMapper(new CustomerCreditRowMapper());
int counter = 0;
ExecutionContext executionContext = new ExecutionContext();
itemReader.open(executionContext);
Object customerCredit = new Object();
while(customerCredit != null){
customerCredit = itemReader.read();
counter++;
}
itemReader.close();
}
我发现有些文档说JdbcCursorItemReader会在查询后自动关闭连接。但是,为什么我们在这里需要 itemReader.close() 呢? JdbcCursorItemReader 是否必须手动关闭连接?
您链接的参考文档中的片段解释了幕后的工作原理,但是当 reader 在面向块的步骤中使用时,您不需要调用 open/close
方法你自己,Spring批处理就可以了。所以你的项目 reader bean 定义应该是这样的:
public ItemReader<RevertedBillCredit> verifyCreditReader() {
JdbcCursorItemReader itemReader = new JdbcCursorItemReader();
itemReader.setDataSource(dataSource);
itemReader.setSql("SELECT ID, NAME, CREDIT from CUSTOMER");
itemReader.setRowMapper(new CustomerCreditRowMapper());
return itemReader;
}