spring - 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
解决方案
根据提供的有限信息,最有可能的原因是异常本身。该异常会将当前事务标记为脏,因此 spring 会将其回滚。
如果尽管存在异常,您仍想将数据存储在侦听器中,请在单独的事务上下文中使用它。最简单的方法是在您的侦听器上使用 @Async 注释并将其显式标记为 Transactional 以确保它启动新事务。查看Spring Event,它更深入地介绍了这个主题。
推荐阅读
- android - 如何在 Android 手表中实现视图寻呼机?
- c - 什么是“结构
“在 c? - redirect - 如何通过 iptables 重定向和负载均衡本地生成的数据包?
- r - 加速 R 中矩阵列的运算
- kml - 在 Cesium 中解析实体
- visual-studio - Caffe 2 安装在 Windows 10 上失败
- python - 如何在 python *** 中使用输入 *** 将文本逐行存储在文件中
- python - Gensim 系数是 nan 并且都是一样的
- angular - Angular 4 [routerLink] 无法识别的表达式:
- php - 为什么 Google Invisible recaptcha 没有回应?