可以将 OneToManyResultSetExtractor/ResultSetExtractor 与 Spring Batch 的 JdbcCursorItemReader 一起使用吗?

Is using a OneToManyResultSetExtractor/ResultSetExtractor with Spring Batch's JdbcCursorItemReader possible?

我只是想知道是否将 OneToManyResultSetExtractorResultSetExtractor 与 Spring 批处理的 JdbcCursorItemReader 一起使用?

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

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

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