【问题标题】:Create an ItemReader Class which gathers data from sub item readers创建一个 ItemReader 类,它从子项目阅读器收集数据
【发布时间】:2017-01-25 15:14:50
【问题描述】:

目前我有多个 Item 阅读器用于单个数据库查询。我想将所有这些信息放入一个对象中。是否有一种 ItemReader 可以为我做到这一点?我希望处理器和编写器在读者作为单个对象读入后处理该对象。所以基本上我需要从一组 ItemReaders 中创建一个对象,并从那时起将它用作我唯一要处理和写入的数据源。 需要注意的一件事是,我无法更改现有的 ItemReaders,因为它是项目的较大部分。

【问题讨论】:

  • 我会说你的方法一开始就有缺陷,试图将这些听众包装成一个单一的听众比它更麻烦。
  • 目前我有Field1Reader、Field2Reader、Field3Reader,我想要一个超级Item reader,它可以将数据插入到我创建的Object中
  • 如前所述,您的方法似乎一开始就有缺陷。为什么不编写一个查询来一次性检索所有内容...而不是尝试在一个中同步 3 个阅读器。
  • 我正在从许多不同的表(大约 16 个)中提取信息。如果我只需要一个查询来查询所有信息,则需要大量 SQL 连接
  • 那又怎样,那是 SQL 擅长的。即使您尝试将 16 个单独的查询同步到一起,这最终可能会更快……然后您可以简单地使用 Spring Batch 中的默认支持来映射事物。

标签: spring spring-data spring-integration spring-batch


【解决方案1】:

即使您无法更改现有的编码,我也会避免使用多个阅读器,而是考虑在全新的阅读器中使用像 Hibernate 这样的 ORM 框架?

或者,使用JdbcCursorItemReader 创建一个新的阅读器,然后将 3 个(或更多)表连接在一起作为您的驱动光标,并将结果集映射到您的自定义对象。如果连接会导致游标为每个对象返回多行,我首先建议返回并查看 Hibernate。如果 Hibernate 不是一个选项,您可以扩展 SingleItemPeekableItemReader 以遍历光标,直到您完全构建您的对象。

Example using SingleItemPeekableItemReader.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2015-02-08
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多