【问题标题】:Handling rollback using BufferWriter in Spring Batch Applications在 Spring Batch 应用程序中使用 BufferWriter 处理回滚
【发布时间】:2021-03-17 07:37:20
【问题描述】:

在我的用例中,我想使用缓冲区写入器来处理字符串的存储。

  • 仅当满足提交间隔时,才会刷新写入

这是为了确保当读取出现错误时,缓冲区写入器能够处理回滚。

有没有这方面的例子或帮助,因为这是我第一次做spring boot应用程序。

谢谢!

【问题讨论】:

    标签: java spring spring-batch rollback bufferedwriter


    【解决方案1】:

    除非您有事务文件系统,否则您无法回滚磁盘flush 操作。由于问题的难度,事务性文件系统从未成为主流。微软试图提供one,但很快就被放弃了。也有一些 API 用于此目的,例如 Java 世界中的 Apache commons-transaction,但由于缺乏事务文件系统,这些 API 不再维护。

    符合 ACID 的数据库是在常规文件系统之上添加事务语义的方法。 SQLite 是使用最广泛的一种,它是 IMO 的一项了不起的工程。您可以看到 SQLite 如何用作application file format

    这就是 Spring Batch 不能真正回滚刷新操作的原因,这让我想到了它如何处理回滚的下一点..

    我想使用缓冲区写入器来处理字符串的存储。只有满足提交间隔时,才会刷新写入

    这已经在 Spring Batch 提供的 FlatFileItemWriter 中实现,默认情况下使用 TransactionawareBufferedWriter。这个缓冲的写入器知道当前活动的事务,并在满足块大小时缓冲项目,然后将它们刷新到磁盘。

    如果事务在刷新缓冲区后回滚,则作业将被标记为失败,您可以重新启动它。在重新启动时,Spring Batch 会将损坏的文件截断到最后一个已知的“好”字节偏移量,并重新开始对最后一个失败的块进行干净写入,然后从那里继续。

    【讨论】:

    猜你喜欢
    • 2020-04-27
    • 2017-10-23
    • 1970-01-01
    • 2015-06-20
    • 2014-07-08
    • 2018-09-18
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多