使用Spring Batch写入不同的数据源 [英] Use Spring Batch to write in different Data Sources

查看:38
本文介绍了使用Spring Batch写入不同的数据源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于一个项目,我需要处理一个表中的项,并为3个不同的表生成3个不同的项,所有3个项都位于与第一个项不同的第二个数据源中。该实现是使用Oracle DB上的Spring Batch完成的。我认为这个question与我需要的内容类似,但它在末尾只写了一项不同的内容。

要消除这种情况,请执行以下操作:

DataSource 1                               DataSource 2
------------                        ------------------------------

   Table A                          Table B     Table C    Table D

读取器应从表A中读取一项。在处理器中,使用来自A中的项的信息,将创建类型为B、C和D的3个新项。此外,表A中的项将被更新。

写手应该能够同时写所有4个项目。我的第一个实现是使用JpaItemWriter更新项A,但我不知道处理器如何将其他3个项提供给编写器以便同时保存所有项。

处理器可以从不同类型返回多个项目吗?我需要创建4个步骤,每个步骤写一个项目吗?在这种情况下,这是否是错误安全的(如果写入D时出错,则A、B和C将回滚)?

提前感谢您的支持!

推荐答案

您的问题实际上是两个问题。让我们逐个来看一下:

ItemProcessor可以返回多个项目
对于传入的每个项,ItemProcessor一次只能返回一个项。因此,在您的特定场景中,您将需要您的ItemProcessor返回包装项目A、B、C和D的包装对象。

如何在同一步骤中编写不同类型
Spring Batch在其编程模型中严重依赖于组合。由于您的ItemProcessor将返回一个包装器对象,因此您最终将编写一个ItemWriter,它将展开A、B、C和D项,并将每个项的编写委托给适当的编写器。因此,在最终的解决方案中,您最终将得到5个:每个项目类型一个项目类型,一个包装所有这些项目类型。这里以我们的CompositeItemWriter为例:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/CompositeItemWriter.java

这篇关于使用Spring Batch写入不同的数据源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆