使用Spring Batch写入不同的数据源 [英] Use Spring Batch to write in different Data Sources
问题描述
对于一个项目,我需要处理一个表中的项,并为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屋!