我正在编写一个Spring批处理应用程序来完成以下工作:有一个输入表(PostgreSQL DB),有人不断地向其中添加行-这基本上就是添加工作项。对于这些行中的每一行,我需要从另一个数据库获取更多数据,进行一些处理,然后执行输出事务,该事务可以是多个SQL查询访问多个表(出于一致性原因,这需要是一个事务)。
现在,输入和输出之间的部分应该是模块化的-它已经有3-4个逻辑上分离的东西,将来还会有更多。这个流程不需要是线性的-下一步要做的处理可以依赖于前一步的结果。简而言之,这基本上类似于您可以使用作业中的步骤设置的流程。
我的主要问题是:通常单个块处理步骤同时具有ItemReader和ItemWriter,即在单个步骤中输入到输出。那么,我是否应该将所有处理步骤都包含在单个ItemProcessor中呢?如何使单个ItemProcessor本身成为有状态工作流?
另一种选择是将每一步都作为微线程实现,然后自己编写两个微线程,以表现为ItemReader和ItemWriter。
有什么建议吗?
发布于 2012-03-07 01:17:21
找到了答案-是的,你实际上被限制在一个单一的步骤。但是:
1)对于线性工作流,您可以“链接”项处理器--即创建一个复合项处理器,您可以为其提供所有通过applicationContext.xml执行实际工作的项处理器。复合项处理器只是一个接一个地运行它们。这就是我现在正在做的。
2)您始终可以将内部子流创建为单独的spring批处理工作流,并通过类似于上面复合项处理器的项处理器中的代码来调用它。我将来可能会转到这一点。
https://stackoverflow.com/questions/9511980
复制相似问题