首页 文章

使用Spring Batch写入不同的数据源

提问于
浏览
1

对于一个项目,我需要处理一个表中的项目,并为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将会回滚)?

在此先感谢您的支持!

1 回答

  • 4

    你的问题实际上是两个问题 . 让我们分别看一下:

    Can an ItemProcessor return multiple items
    对于传入的每个项目,ItemProcessor一次只能返回一个项目 . 因此,在您的特定场景中,您需要 ItemProcessor 返回包装项目A,B,C和D的包装器对象 .

    How can I write different types in the same step
    Spring Batch在很大程度上依赖于编程模型中的组合 . 由于 ItemProcessor 将返回一个包装器对象,因此您最终会编写一个 ItemWriter ,它会解开项目A,B,C和D,并将每个项目的写入委托给适当的编写者 . 所以在最终的解决方案中,你最终会得到5个 ItemWriter :每个项目类型一个,包含所有这些项目的一个 . 以这里的例子来看看我们的 CompositeItemWriterhttps://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/CompositeItemWriter.java

相关问题