【发布时间】:2020-03-02 17:01:36
【问题描述】:
我想知道是否有可能以某种方式配置作业,我可以重复几个分块步骤,直到处理完整个数据? 背景是,我需要处理一些真正的大数据,并且在处理这些数据时,存在意外中止的风险。为了防止一遍又一遍地从头开始重新启动,我想对数据进行一些分区,这可以用来循环分块的步骤。 由于给定的数据,很遗憾无法利用 spring-batch restartable-job 功能来实现我的目标。 我的源数据库由几个或多或少松散连接的表组成,每个表都在自己的步骤中处理。所以我有类似的东西:
... omitting job-configuration ...
<batch:step="A" next="B">
<batch:tasklet>
<batch:chunk reader="readerA" writer="writerA" commit-interval="1000" />
</batch:tasklet>
</batch:step>
<batch:step="B" next="C">
<batch:tasklet>
<batch:chunk reader="readerB" writer="writerB" commit-interval="5000" />
</batch:tasklet>
</batch:step>
... some more steps with similar set-up...
每个阅读器都有自己的 SQL 语句,用于从源数据库中获取必要的数据,并将结果写入目标数据库的另一个表中。
现在,我的想法是,以某种方式调整这些 SQL,将数据划分为一些不相交但一致 (*) 的部分,以便我可以像以前一样使用分块步骤重复处理。也许只是添加一些“父步骤”来控制循环是否必须结束。
(*) “不相交但一致”的意思是,虽然不同步骤中的数据是从不同的表中获取的,但存在依赖关系。例如,为步骤 B 获取要处理的数据将与表 A 进行连接,只选择成功处理的集合。
感谢您的任何建议! /安德烈亚斯
【问题讨论】:
标签: spring-batch