首页 > 解决方案 > Repository 没有保存数据 onError 方法,而保存了 Listener 的 onWrite 方法

问题描述

我有一个简单的监听器,有 3 种方法。和一个带有自动装配的存储库。从 afterWrite 保存对象时,它工作得很好。但是从 onError 方法保存项目时不会发生异常,但是它没有保存任何数据。感谢您的建议。

公共类 WriteListener 实现 ItemWriteListener{

public void beforeWrite(List items) {
    System.out.println("Going to write following items: "+ items.toString());
}

public void onWriteError(Exception exception, List items) {
    System.out.println("Error occurred when writing items!");

     testRepository.save(items.get(0)); //not working
}
public void afterWrite(List items) {
    testRepository.save(items.get(0)); //not nicely and save data

标签: springspring-bootspring-batch

解决方案


根据提供的有限信息,最有可能的原因是异常本身。该异常会将当前事务标记为脏,因此 spring 会将其回滚。

如果尽管存在异常,您仍想将数据存储在侦听器中,请在单独的事务上下文中使用它。最简单的方法是在您的侦听器上使用 @Async 注释并将其显式标记为 Transactional 以确保它启动新事务。查看Spring Event,它更深入地介绍了这个主题。


推荐阅读