【问题标题】:Spring batch: RollBack for CompositeItemWriter春季批处理:CompositeItemWriter 的回滚
【发布时间】:2019-04-08 17:23:38
【问题描述】:

我是 Spring 批处理的新手,目前正在使用 MultiResourceItemReader 读取多个文件,并使用 CompositeItemWriter 将其写入不同的数据库表中,每个文件包含不同数量的行。 我的问题:如果在数据库中插入一行失败,是否有可能对该文件插入的所有行进行回滚? 有没有办法进行回滚?

【问题讨论】:

    标签: java spring spring-batch


    【解决方案1】:

    Spring batch 以块的形式读写数据。假设您有 1000 条记录,并且您的块大小为 100,并且您正在执行批量插入。对于每个块(100 个项目),spring batch 将打开一个事务,插入 100 条记录并提交事务。万一发生任何错误,该特定块(100 条记录)将被回滚。但是之前已经插入的所有块都不能回滚。

    【讨论】:

    • 感谢您的清晰解释。但是如果我没有固定数量的交易项目。例如,第一个文件有 100 个项目,第二个有 104 个项目,那么块大小应该是 104?还是有可能块大小取决于文件中的行数?
    • 没有。卡盘尺寸可以是任何东西。如果您有 104,您的 ItemReader 将读取 100 个项目并将 100 个项目发送到您的 ItemWriter。您的 ItemWriter 应该对数据库进行批量插入/更新。在下一个卡盘中,您的作者将仅读取和插入 4 个项目。在下一个块中,ItemReader 将返回 null,因为到达文件末尾。因此这项工作将被终止。
    猜你喜欢
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2014-12-15
    • 2018-05-27
    • 2015-05-13
    • 2017-06-25
    • 2017-10-06
    • 2021-06-21
    相关资源
    最近更新 更多