我很苦恼如何设计春季批处理作业。总体目标是检索约2000万条记录并将它们保存到sql数据库。春季批处理作业设计 - 多读者
我是这样做的两部分。首先,我检索我想要检索的记录的2000万个ID并将其保存到文件(或DB)中。这是一个相对较快的操作。其次,我循环访问我的Ids文件,分批处理2,000个,并从外部服务中检索相关记录。然后我再重复一遍,每次记录2000个Ids,直到我找回所有记录。对于我检索的每批2,000条记录,我将它们保存到数据库中。
有些人可能会问为什么我这样做是分两步进行的。我最终计划使第二步平行运行,以便可以并行检索2,000个记录的批次,并希望大大加快下载速度。有了Ids,我可以将这项工作分成多个批次。现在,我们不必担心并行性,只关注如何设计更简单的顺序工作。
想象一下,我已经解决了本地保存所有Ids的第一个问题。他们在一个文件中,每行一个Id。我如何设计第二部分的步骤?
下面是我在想什么......
使用平面文件阅读器读取的ID 2000。我需要一个聚合器,因为我只想对每个2K Ids批次的外部服务执行一个查询。这是我挣扎的地方。我是否嵌套一系列读者?或者我可以在处理器或作家中“读”吗?
本质上,我的问题是我想从文件读取行,聚合这些行,然后立即做另一个“读取”来检索相应的记录。我几乎想要将读者联系在一起。
最后,一旦我从外部服务中检索到记录,我将拥有一个记录列表。这意味着当他们到达作家时,我会列出一个列表。我想要一个对象列表,以便我可以使用JdbcItemWriter开箱即用。
想法?希望这是有道理的。
安德鲁
我刚刚在文档中找到了这个例子,似乎表明我应该在处理器中检索完整对象(使用来自阅读器的ID)。也许我会从字面上理解这些接口名称。处理器中的“读取”感觉很奇怪。 HTTP://docs.spring。IO /弹簧分批/中继/参考/ HTML/patterns.html#drivingQueryBasedItemReaders – anschoewe 2014-09-20 20:49:44