是否可以在Spring Batch的JdbcCursorItemReader中使用OneToManyResultSetExtractor / ResultSetExtractor?

时间:2015-07-14 16:07:57

标签: spring-batch spring-jdbc

我只是想知道在Spring Batch的OneToManyResultSetExtractor中使用ResultSetExtractor还是JdbcCursorItemReader

我遇到的问题是,预期的RowMapper只处理每行一个对象,并且我有一个连接sql查询,每个对象返回许多行。

1 个答案:

答案 0 :(得分:1)

开箱即用,它不支持使用ResultSetExtractor。这样做的原因是包装ItemReader是有状态的,并且需要能够跟踪已经消耗了多少行(否则它不会知道)。通常在Spring Batch中完成此类功能的方法是使用ItemProcessor来丰富对象。你的ItemReader会返回一个(一个到多个),然后ItemProcessor会用多个来丰富对象。这是批处理中常见的模式,称为驱动查询模式。您可以在Spring Batch文档中阅读更多相关信息:http://docs.spring.io/spring-batch/trunk/reference/html/patterns.html

话虽这么说,你也可以用你自己的实现来包装JdbcCursorItemReader,为你执行聚合逻辑。