【发布时间】:2020-02-28 18:02:55
【问题描述】:
我对 Spring Batch 很陌生,遇到了一个我找不到解决方案的问题。
我创建了一个包含一个步骤和两个流程的作业:
第 1 步:
检索合同编号列表(为简化起见,将用于搜索更多记录的唯一编号)。使用 ItemReader 单块,它会将单个合同号传递给下一步。
流程 1:
此流程有一个 Step(Reader,Processor,Writer),其 Reader 将选择此合同编号并检索成员 ID 列表。这些 Id 将按块(共 10 个)传递给处理器。
处理器将进一步执行几个查询调用,最终为编写者创建一个参与者详细信息列表。编写器会将这些数据分块写入 Workbook 对象。
流程 2:将所有数据写入工作簿后,将对象作为文件发送到远程位置。这个过程是使用一个 tasklet 完成的,该 tasklet 具有将文件发送到建议的目的地的所有必要细节。
现在,一旦整个过程完成(步骤 1-> 流程 1-> 流程 2),它会检查是否有更多的合同详细信息要写入远程位置。
如果是,则从列表中检索另一个合同编号,然后将其传递给流(flow1 和 flow2) 处理完所有合同编号后,代码以 RepeatStatus.FINISHED 完成
添加图表以便更好地理解:
Diagrammatic representation of the above explanation
看起来像这样:
Job
-> Step 1 (retrieve Id number list but send a single contract number)
-> Flow 1
-> Reader
-> Processor
-> Writer
-> Flow 2
-> Tasklet (Send file to remote location)
(If all contract-numbers are not processed go to Step 1 and iterate to the next contract-number else finish the job)
我的问题从这里开始:
- 如何根据条件从流程 2 跳回步骤 1?我确实找到了一些建议,人们添加了一个决策器循环,但您可以返回上一步(在这种情况下,流程 2 中不满足条件,流程 2 将被重新触发)。那么如何从 flow2 跳回第 1 步呢?
- 如何在整个作业的所有步骤和流程之间传递数据? (不使用执行上下文)
如果您认为有更好的方法,请提出建议。
【问题讨论】:
-
您的初始输入数据集是固定的还是可以在作业运行时更改?
-
一旦作业开始运行并且我得到我的输入,它将保持不变。但是,它将是一个需要在作业中逐个迭代的输入列表。
标签: spring spring-batch