Spring batch 回滚ItemProcessor并仍然调用ItemWriter

Spring batch 回滚ItemProcessor并仍然调用ItemWriter,spring-batch,Spring Batch,我有一个向数据库写入的ItemProcessor和一个向文件写入的ItemWriter。我希望能够在ItemProcessor中回滚,并且仍然能够通过ItemWriter。 更具体地说,我的逻辑接收从FlatFileItemReader接收的对象,并使用它对数据库进行一些维护,如果一切顺利,则在对象中设置一些属性,如果遇到任何数据库问题,则捕获异常并在对象中设置一些其他属性。处理后的对象随后通过FlatFileItemWriter写入文件。我试图扩展FlatFileItemWriter,以便在写

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

我发现FlatFileItemWriter正在使用TransactionWareBufferedWriter,因此,无法回滚事务并仍然写入磁盘上的文件,因为TransactionWareBufferedWriter只有在事务顺利完成时才会刷新磁盘。因此,我实现了一个纯Writer,它实现了ItemWriter接口,我只是在写入文件、刷新并关闭流之后抛出了一个异常,它确实回滚了事务,同时也写入了磁盘上的文件


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

我有一个可以写入数据库的ItemProcessor
:item processor不是用来写入数据的。感觉您的问题更像是工作设计问题,而不是SpringBatch中的问题。把你的工作分成两步怎么样?没错,这是一个糟糕的设计,但它不是我的,我不允许对我上司设计的工作做实质性的改变