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