可以将 OneToManyResultSetExtractor/ResultSetExtractor 与 Spring Batch 的 JdbcCursorItemReader 一起使用吗?
Is using a OneToManyResultSetExtractor/ResultSetExtractor with Spring Batch's JdbcCursorItemReader possible?
我只是想知道是否将 OneToManyResultSetExtractor
或 ResultSetExtractor
与 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
,为您执行聚合逻辑。
我只是想知道是否将 OneToManyResultSetExtractor
或 ResultSetExtractor
与 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
,为您执行聚合逻辑。