JSR352 批处理作业的设计:几个步骤是否比一个大型批处理更好?
Design of JSR352 batch job: Is several steps a better design than one large batchlet?
我的 JSR352 批处理作业需要从数据库读取,然后根据结果流向两个路径之一,每个路径都涉及更多 if/else 场景。我想知道使用大型 batchlet 编写单个步骤与由较小的 batchlet 组成的多个步骤之间的优缺点是什么。此作业不涉及块大小大于 1 的块步骤,因为它需要立即持久化读取结果,以防万一在继续其他逻辑之前。这项工作将 运行 使用 Control-M,我想知道使用多个较小的步骤是否可以提供更多的控制点。
根据该描述,我建议这些
更多细粒度步骤的好处
1。重启
作业失败后,重新启动时的默认行为是从上一个作业执行失败的步骤开始执行。因此,将作业分解为更多步骤可以避免编写逻辑以从中断处继续执行并避免重新处理,并且可以节省流程中的执行时间。
2。重用
通过将离散函数封装为它自己的 batchlet,您可以在其他作业(或什至在该作业的稍后部分)中组合其他步骤,这些作业是使用同一个 batchlet 实现的。
3。将逻辑提取到 XML
通过将转换逻辑移动到转换元素中,并提取条件流(例如 <next on="RC1" to="step3"/>
等)
在作业定义 XML (JSL) 中,您可以在标准控制点引入更改,而无需进入 Java 源并找到正确的位置。
最后的想法
您必须决定这些好处对您的情况是否值得。
再想想
如果您仍然可以从检查点甚至 skip/retry 中找到好处,我不会仅仅因为您使用的是 1-item 块就自动排除块步骤。 (但这可能是一个单独的问题。)
我的 JSR352 批处理作业需要从数据库读取,然后根据结果流向两个路径之一,每个路径都涉及更多 if/else 场景。我想知道使用大型 batchlet 编写单个步骤与由较小的 batchlet 组成的多个步骤之间的优缺点是什么。此作业不涉及块大小大于 1 的块步骤,因为它需要立即持久化读取结果,以防万一在继续其他逻辑之前。这项工作将 运行 使用 Control-M,我想知道使用多个较小的步骤是否可以提供更多的控制点。
根据该描述,我建议这些
更多细粒度步骤的好处
1。重启
作业失败后,重新启动时的默认行为是从上一个作业执行失败的步骤开始执行。因此,将作业分解为更多步骤可以避免编写逻辑以从中断处继续执行并避免重新处理,并且可以节省流程中的执行时间。
2。重用
通过将离散函数封装为它自己的 batchlet,您可以在其他作业(或什至在该作业的稍后部分)中组合其他步骤,这些作业是使用同一个 batchlet 实现的。
3。将逻辑提取到 XML
通过将转换逻辑移动到转换元素中,并提取条件流(例如 <next on="RC1" to="step3"/>
等)
在作业定义 XML (JSL) 中,您可以在标准控制点引入更改,而无需进入 Java 源并找到正确的位置。
最后的想法
您必须决定这些好处对您的情况是否值得。
再想想
如果您仍然可以从检查点甚至 skip/retry 中找到好处,我不会仅仅因为您使用的是 1-item 块就自动排除块步骤。 (但这可能是一个单独的问题。)