【发布时间】:2021-12-20 16:35:10
【问题描述】:
我正在开发一个 Java 项目 (Spring),我需要为一个相当复杂的场景创建批处理。有些步骤必须等待相当长的时间,例如20天。我不太确定,我应该如何处理这种情况。
我的第一个想法是在 BPMN 引擎(如 Camunda)中执行此操作,其中等待状态是建模元素的一部分。考虑到需要处理的数据量,我最终会在一次运行中得到大约 250.000 个流程实例,并且在基于 BPMN 的处理的情况下,从性能角度来看,这个数据量涉及到问题。
另一种解决方案是采用专为批处理而设计的框架,例如春季批次。在这种情况下,我的问题是漫长的等待状态。据我了解,Spring Batch 不支持等待状态。然而,我提出的每个草案解决方案都有一些限制。
我是否会大批量进行,可能会发生等待的步骤将停止,直到 20 天结束。这将阻止处理其余要处理的数据。我想我可以将给定的数据项标记为稍后处理,然后重新运行批处理,直到处理完每个项目。这意味着我需要以线性方式布置处理的每个分支,并且这些步骤本身将只接受为它们标记的数据项。
我是否会为每个要处理的项目启动一个新的批处理作业,我需要一种机制来在给定点停止,然后从给定步骤恢复作业/步骤。一个自然的解决方案是创建一个更细粒度的作业系统,但这样我会丢失有关处理的上下文信息。
在这两种情况下,我最终都会将自己的 BPMN 解决方案实现为数据库中的状态机...
如果您能给我任何帮助或提示,我将不胜感激。提前致谢。
【问题讨论】:
标签: java spring spring-batch camunda