Jdbc Spring批处理中的块处理有效地将您限制在一个步骤内?

Jdbc Spring批处理中的块处理有效地将您限制在一个步骤内?,jdbc,spring-batch,Jdbc,Spring Batch,我正在编写一个Spring批处理应用程序来执行以下操作:有一个输入表PostgreSQL DB,有人不断向其中添加行,这基本上就是添加工作项。对于这些行中的每一行,我需要从另一个数据库获取更多数据,进行一些处理,然后执行一个输出事务,该事务可以是多个SQL查询,涉及多个表。出于一致性原因,这需要是一个事务 现在,输入和输出之间的部分应该是模块化的-它已经有3-4个逻辑上分开的东西,将来还会有更多。这个流程不需要是线性的-接下来要做什么处理可能取决于前一个流程的结果。简而言之,这基本上类似于使用作

我正在编写一个Spring批处理应用程序来执行以下操作:有一个输入表PostgreSQL DB,有人不断向其中添加行,这基本上就是添加工作项。对于这些行中的每一行,我需要从另一个数据库获取更多数据,进行一些处理,然后执行一个输出事务,该事务可以是多个SQL查询,涉及多个表。出于一致性原因,这需要是一个事务

现在,输入和输出之间的部分应该是模块化的-它已经有3-4个逻辑上分开的东西,将来还会有更多。这个流程不需要是线性的-接下来要做什么处理可能取决于前一个流程的结果。简而言之,这基本上类似于使用作业中的步骤设置的流程

我的主要问题是:通常单个块处理步骤同时具有ItemReader和ItemWriter,即在单个步骤中从输入到输出。那么,我是否应该将所有处理步骤作为单个ItemProcessor的一部分包括在内?如何使单个ItemProcessor本身成为有状态工作流

另一个选项是使每个步骤都成为一个Tasklet实现,并自己编写两个Tasklet来充当ItemReader和ItemWriter


有什么建议吗?

找到了答案-是的,您实际上只限于一个步骤。但是:

1对于线性工作流,您可以链接itemprocessor,即创建一个复合itemprocessor,您可以向其提供通过applicationContext.xml执行实际工作的所有itemprocessor。复合itemprocessor只是一个接一个地运行它们。这就是我现在正在做的


2您始终可以将内部子流创建为单独的spring批处理工作流,并通过类似于上面复合itemprocessor的itemprocessor中的代码调用它。将来我可能会转向这个问题。

我的第一个想法是,这不是批处理应用程序,但我可能错了。这个过程听起来没有任何开始或停止,当然也没有任何参数可以用来定义“作业”。这听起来像一个简单的Java应用程序。您考虑SpringBatch有什么特别的原因吗?作为一个“简单的Java应用程序”,您会怎么做?