我正在编写一个Spring Batch应用程序来执行以下操作:有一个输入表(PostgreSQL DB),有人不断添加行 - 这基本上是要添加的工作项。对于这些行中的每一行,我需要从另一个DB获取更多数据,进行一些处理,然后执行输出事务,这可能是多个SQL查询触及多个表(出于一致性原因,这需要是一个事务)。
现在,输入和输出之间的部分应该是模块化的 - 它已经有3-4个逻辑上分开的东西,并且将来会有更多。该流程不必是线性的 - 接下来要进行的处理可以取决于先前的结果。简而言之,这基本上就像您可以使用作业中的步骤设置的流程。
我的主要问题是:通常单个块处理步骤同时具有ItemReader和ItemWriter,即,在单个步骤中输入到输出。那么,我应该将所有处理步骤作为单个ItemProcessor的一部分包含在内吗?我如何将单个ItemProcessor本身作为一个有状态的工作流程?
另一个选择是使每个步骤成为Tasklet实现,并自己编写两个tasklet以表现为ItemReader和ItemWriter。
有什么建议吗?
答案 0 :(得分:0)
找到答案 - 是的,你实际上只限于一步。但是:
1)对于线性工作流,您可以“链接”迭代处理器 - 即创建一个复合迭代处理器,您可以通过applicationContext.xml为所有迭代处理器提供实际工作。复合迭代处理器只是逐个运行它们。这就是我现在正在做的事情。
2)您始终可以将内部子流创建为单独的弹簧批处理工作流,并通过类似于上面的复合迭代处理器的迭代处理器中的代码调用它。我将来可能会转向这个。