对于一个项目,我需要处理一个表中的项目,并为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将会回滚)?
提前感谢您的支持!
答案 0 :(得分:4)
你的问题实际上是两个问题。让我们分别看一下:
ItemProcessor
可以退回多个项目
对于传入的每个项目,ItemProcessor一次只能返回一个项目。因此,在您的特定场景中,您需要ItemProcessor
返回包装项目A,B的包装器对象。 ,C和D.
如何在同一步骤中编写不同的类型
Spring Batch在很大程度上依赖于编程模型中的组合。由于您的ItemProcessor
将返回一个包装器对象,因此您最终会编写一个ItemWriter
来解开项目A,B,C和D,并将每个文章的写入委托给适当的作者。因此,在最终解决方案中,您最终会获得5个ItemWriter
s:每个项目类型一个,包含所有这些项目类型。请查看我们的CompositeItemWriter
示例:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/CompositeItemWriter.java