回滚 ItemProcessor 并仍然调用 ItemWriter

Rollback on ItemProcessor and still call ItemWriter

我有一个写入数据库的 ItemProcessor 和一个写入文件的 ItemWriter。我希望能够在 ItemProcessor 中回滚并且仍然能够通过 ItemWriter。 更具体地说,我的逻辑采用从 FlatFileItemReader 接收的对象并使用它对数据库进行一些维护,如果一切顺利,则在对象中设置一些属性,如果我遇到任何数据库问题,我会捕获异常和我在对象中设置了一些其他属性。处理后的对象稍后通过 FlatFileItemWriter 写入文件。我试图扩展 FlatFileItemWriter 以在写入后抛出异常以触发回滚,但这样做会阻止事情进入文件。

我发现 FlatFileItemWriter 正在使用 TransactionAwareBufferedWriter,因此无法 rollback 事务并仍然写入磁盘上的文件,因为 TransactionAwareBufferedWriter 只有在事务顺利完成时才会刷新到磁盘。所以我确实实现了一个纯 Writer 实现了 ItemWriter interface 我只是抛出一个 Exception 在写入文件后,刷新并关闭流并且它正在工作,它确实回滚事务并同时写入磁盘上的文件。

我暂时不会接受我的答案,看看是否有人能想出更好的方法,也许不会失去拥有 FlatFileItemWriter.[=10= 的好处]