对于一个项目,我需要处理一个表中的项目,并为 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 将会回滚)?
预先感谢您的支持!
你的问题实际上是两个问题。让我们分别看看:
Can an ItemProcessor
返回多个项目
对于传入的每一项,ItemProcessor 一次只能返回一项。因此,在您的特定场景中,您需要ItemProcessor
返回包装项目 A、B、C 和 D 的包装对象。
如何在同一步骤中编写不同类型
Spring Batch 在其编程模型中严重依赖组合。自从你的ItemProcessor
将返回一个包装对象,你最终会写一个ItemWriter
解开项目 A、B、C 和 D,并将每项的写作委托给适当的作者。所以在最终的解决方案中,你最终会得到 5ItemWriter
s:每个项目类型一个,一个包含所有这些项目类型。看看我们的CompositeItemWriter
举个例子:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastruct/src/main/java/org/springframework/batch/item/support/CompositeItemWriter.java
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)