我想实现一个spring批处理作业,它执行以下操作:
开始作业
启动多个并行流:
流程1:从数据库1读取并处理。
流程2:从 db2 读取并处理。
将数据插入数据库3
我知道我可以将数据库插入到各个流本身中,但我认为这会带来从多个位置对同一表行进行并发访问的问题,因为不同的线程将在db3中写入同一个表。
我最初以为可以使用tasklet插入db3,但不知道如何将flow1和flow2中的数据获取到最终的tasklet中。
关于如何做到这一点有什么线索吗?
编辑以获取更多说明:
作业用于将遗留数据迁移到具有不同结构的新数据库中。新表所需的数据分散在遗留数据库中
流1和流2不相互依赖。这两个流都从不同的遗留数据库获取各自的数据,并将其Map到新的结构。
现在假设这两个流的结构(处理后)是相同的,我想收集它们,然后将它们插入新的数据库。
1条答案
按热度按时间gk7wooem1#
流1和流2不相互依赖[…]这两个流的结构(处理后)是相同的
由于流之间不相互依赖,并且它们产生要写入db3的相同结构,因此可以创建两个并行运行的面向块的步骤,每个步骤从不同的数据库读取数据。
我想将它们分组,然后将它们插入新数据库。
由于您需要对项目进行分组,一种常见的技术是将它们写入一个或多个临时表中,您可以在最终写入目标之前对这些临时表进行分组/聚合。如果不需要进行分组,就可以将两个流中的数据直接写入db3。