【发布时间】:2012-03-01 07:03:42
【问题描述】:
我正在编写一个 Spring Batch 应用程序来执行以下操作:有一个输入表 (PostgreSQL DB),有人不断向其中添加行 - 这基本上是添加的工作项。对于这些行中的每一行,我需要从另一个数据库中获取更多数据,进行一些处理,然后执行一个输出事务,该事务可以是多个 SQL 查询,涉及多个表(出于一致性原因,这需要是一个事务)。
现在,输入和输出之间的部分应该是模块化的——它已经有 3-4 个逻辑分离的东西,将来还会更多。这个流程不必是线性的——接下来要做什么处理可以取决于之前的结果。简而言之,这基本上就像您可以使用作业中的步骤设置的流程。
我的主要问题是:通常单个块处理步骤同时具有 ItemReader 和 ItemWriter,即在一个步骤中输入到输出。那么,我是否应该将所有处理步骤作为单个 ItemProcessor 的一部分包含在内?如何使单个 ItemProcessor 本身成为有状态的工作流?
另一种选择是让每一步都成为一个 Tasklet 实现,并自己编写两个 tasklet 来充当 ItemReader 和 ItemWriter。
有什么建议吗?
【问题讨论】:
-
我的第一个想法是这不是批处理应用程序,但我可能错了。听起来这个过程没有任何开始或停止,而且似乎没有任何参数可以用来定义“工作”。这听起来像是一个简单的 Java 应用程序。您查看 Spring Batch 有什么特别的原因吗?
-
作为一个“简单的 Java 应用程序”,你会如何做?
标签: jdbc spring-batch