Spring batch 使用Spring批处理写入不同的数据源

Spring batch 使用Spring批处理写入不同的数据源,spring-batch,Spring Batch,对于一个项目,我需要处理一个表中的项,并为3个不同的表生成3个不同的项,所有3个都在第二个数据源中,与第一个数据源中的一个不同。该实现是通过Oracle DB上的Spring批处理完成的。我想这和我需要的东西很相似,但在那里,它在最后只写了一个不同的项目 为了说明情况: DataSource 1 DataSource 2 ------------ ----------------------

对于一个项目,我需要处理一个表中的项,并为3个不同的表生成3个不同的项,所有3个都在第二个数据源中,与第一个数据源中的一个不同。该实现是通过Oracle DB上的Spring批处理完成的。我想这和我需要的东西很相似,但在那里,它在最后只写了一个不同的项目

为了说明情况:

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

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

作者应能同时书写所有4项内容。我的第一个实现是使用JpaItemWriter更新项目a,但我不知道处理器如何将其他3个项目交给writer,以便同时保存所有项目

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


提前感谢您的支持

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

项目处理器能否返回多个项目
ItemProcessor一次只能为传入的每个项目返回一个项目。因此,在您的特定场景中,您将需要
ItemProcessor
返回包装项目a、B、C和D的包装器对象

如何在同一步骤中编写不同的类型

SpringBatch在很大程度上依赖于其编程模型中的组合。由于您的
ItemProcessor
将返回一个包装器对象,因此您将最终编写一个
ItemWriter
,它将打开项目a、B、C和D,并将每个项目的写入委托给适当的编写器。因此,在最终的解决方案中,您将得到5个
ItemWriter
s:一个用于每个项目类型,另一个用于包装所有这些项目。以我们的
CompositeItemWriter
为例:

非常感谢!这是我需要的信息!