如何在Spring Batch中的块进程中调用另一个步骤?

时间:2011-10-11 09:52:46

标签: java spring spring-batch

Spring Batch是否可行/可取?

我有一个csv文件,比如说foo.csv。我设置了一个块进程,将文件读入Foo对象,然后将它们处理为Bar对象。最后将这些文件写入文件bars.csv。

  

foos.csv ---- [IR] ----> Foo ---- [IP] ----->吧------ [IW] ----> bars.csv

     

其中IR代表ItemReader,Item代表ItemProcessor,IW代表ItemWriter

现在我想进一步处理Bar对象,将其转换为Baz对象并使用它做其他一些事情,例如把它写入文件bazs.csv左右。

  

foos.csv ---- [IR] ----> Foo ---- [IP 1] ----->吧------ [IW 1] ----> bars.csv
  ---- [IP 2] -----> Baz ------ [IW 2] ----> bazs.csv

或者,甚至更好

  

foos.csv ---- [IR] ----> Foo ---- [IP 1] ----->吧------ [IW 1] ----> bars.csv
  ----- [IW 2] ----> [下一步]

     

我们在迭代中重复调用下一步,从而传递下一个Bar对象。在下一步中,我们可以转换为Baz。

总结一下:是否可以从块进程中调用一个步骤?这是个好主意吗?如果没有,有哪些替代方案?

2 个答案:

答案 0 :(得分:3)

目前您至少有2种可能的解决方案

  • chaining itemprocessors,每个处理器也可以是作家
  • 使用数据库来保存中间工作并将其用于将来的步骤和/或flows

您的上一个用例看起来更好用[{3}}

实现

答案 1 :(得分:2)

您可以考虑使用CompositeItemWriter将处理步骤中的数据输出到两个不同的源,一个输出到“bars.csv”,一个输出到某种“Baz”ItemWriter。

您的流程将如下所示:

foos.csv ---- [IR] ---> Foo --- [IP1] ---> Bar ---- [IW1] ----> bars.csv 
                                                    [IW2] ----> Baz --- [further steps]

这会解决您的使用案例吗?