为什么JSR 352的ItemWriter接口中有checkpointInfo?任何样本实现?

时间:2017-08-03 18:35:13

标签: java spring-batch jsr352

为什么在Jsr 352 ItemWriter接口中有checkpointInfo方法。读者和作者如何就提交的内容进行沟通

1 个答案:

答案 0 :(得分:0)

编写器无需使用 checkpointInfo()方法。您只需选择忽略 open()中的检查点值,然后返回import UIKit class FluidIntakeMainMenuViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { //MARK: - Collection View Properties @IBOutlet weak var ibCollectionView: UICollectionView! @IBOutlet weak var ibCollectionViewLayout: UICollectionViewLayout! var cellArray:[customCollectionViewCell] = Array(repeatElement(customCollectionViewCell(), count: 6)) let displayedCellDimensions = CGSize(width: 343, height: 248) //MARK: - Xcode-generated Methods override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. ibCollectionView.dataSource = self ibCollectionView.delegate = self } //My code for this class continues down here... (如 AbstractItemWriter 那样)。这很常见。通常,您不需要任何类型的“游标”或索引来写入数据库,因为您只需插入/更新读取器/处理器提供给您的任何内容(基于读取器检查点等)。

写入平面文件时可能会使用检查点。由于文件写入通常不是事务性的,因此您需要以某种方式解释此问题。

一种简单的方法是在最近一个块的末尾检查文件中的字节#/偏移量。因此,如果在将记录501-600写入文件之后块事务回滚,那么在重新启动时,您将重新读取并重新处理记录501-600。即使文件中已存在记录501-600,您现在也会覆盖它们,因为您在记录500之后(重新)从字节位置开始。

由于不应经常重启,并且您只需要重新处理一个块,这可以提供一种简单,可接受的方式来解决缺少事务资源的问题。