在spring批处理应用程序中使用bufferwriter处理回滚

n8ghc7c1  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(342)

在我的用例中,我想使用缓冲区编写器来处理字符串的存储。
只有在满足提交间隔时,它才会刷新写操作
这是为了确保当读取出错时,缓冲区写入程序能够处理回滚。
这方面有什么例子或帮助吗,因为这是我第一次做spring引导应用程序。
谢谢!

pprl5pva

pprl5pva1#

除非有事务性文件系统,否则无法回滚磁盘 flush 操作。事务性文件系统从来没有成为主流,因为这个问题很难解决。微软试图提供一个,但很快就被放弃了。以前也有一些api用于此,比如java世界中的apachecommons事务,但是由于缺少事务性文件系统,这些api不再被维护。
acid兼容数据库是在常规文件系统之上添加事务语义的方法。sqlite是应用最广泛的一种,它是imo中一个令人惊叹的工程部分。
这就是为什么springbatch不能真正回滚flush操作的原因,这就引出了它如何处理回滚的下一点。。
我想使用缓冲区编写器来处理字符串的存储。只有在满足提交间隔时,它才会刷新写操作
这已在中实现 FlatFileItemWriter 由spring批处理提供,默认情况下使用transactionwarebufferedwriter。此缓冲写入程序知道当前活动的事务,并在满足块大小时将项目刷新到磁盘之前对其进行缓冲。
在刷新缓冲区后回滚事务的情况下,作业将被标记为失败,您可以重新启动它。在重新启动时,springbatch将把损坏的文件截断到最后一个已知的“良好”字节偏移量,并重新开始对最后一个失败的块的干净写入,然后从那里继续。

相关问题