您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

数据库事务在大厂的实践——事务生效时能正确回滚吗? {源码交易}

  • 时间:2022-08-10 01:09 编辑: 来源: 阅读:269
  • 扫一扫,手机访问
摘要:数据库事务在大厂的实践——事务生效时能正确回滚吗? {源码交易}
AOP实现事务:使用try?C/atch包装@Transactional注释方法。当方法异常且满足一定条件时,可以在catch中设置事务回滚,如果没有异常,则直接提交事务。 “正条件”包括:只有当异常传播了标有@Transactional注释的方法,事务才能回滚。 在Spring的TransactionAspectSupport中,有一个invokeWithinTransaction方法,这是解决事务的逻辑。 可以看出,后续的事务只有在捕获到异常的情况下才能得到解决:image默认情况下,当RuntimeException或者错误发生时,Spring会回滚事务。 Spring打开的DefaultTransactionAttribute检测到的异常一般是业务异常或者是另一个类似方法的返回值。如果出现这样的异常,业务可能还没有完成,所以不会主动回滚。Error或RuntimeException表示意外的结果。你应该回滚图像负教材注册客户:createUserError1抛出RuntimeException,但是方法中的catch有所有异常:imagecreateUserError2。注册用户将同时读取其他任务文件。如果文件读取失败,希望客户注册的DB操作回滚。 虽然这里没有catch异常,但是因为otherTask抛出了检测到的异常,所以检测到的异常也由createUserError2传播,并且事务不回滚。虽然imagereadfileimagcreateuserror1和2方法的实现和调用避免了无效事务的坑,但是由于异常解析不当,在文件操作异常时,仍然没有回滚事务。 修复bug以及如何通过日志验证修复成功。 对于这两种情况,相应的修复方法如下 1如果想捕捉异常并自己解决,可以手动设置当前事务回滚@ transactional public void create user right 1(string name){ try { user repository . save(new user entity(name));抛出新的runtime exception(" error ");} catch (Exception ex) { log.error("创建用户失败",ex);transactionaspectsupport . currenttransactionstatus()。setRollbackOnly();}}查看日志,事务确定回滚。 事务性代码已请求回滚:手动请求回滚。 2在注释中宣布,预计遇到的所有异常都将被回滚,以突破不回滚检测到的异常的默认限制。 检查映像日志并提醒回滚:[映像上传失败...(image-cd575d-1605664603758)】这个案例包括DB操作和IO操作。当出现IO操作问题时,数据库事务应该回滚以确保逻辑一致性。 因为汇总异常没有得到正确解决,所以事务是有效的,但在发生异常时不会回滚。 默认情况下,Spring只在@Transactional注释的方法发生RuntimeException和Error时回滚,所以如果方法捕捉到异常,就需要通过手写代码解决事务回滚。 如果希望Spring回滚其他异常,可以配置@Transactional批注的rollbackFor和noRollbackFor属性来覆盖Spring的默认配置。 有些业务可能包含重复的DB操作,不确定是否希望将两个操作作为一个事务处理。这时候就要仔细考虑事务传播的配置了。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)
【技术支持|常见问题】你正确使用https了吗? [php源码](2022-11-04 10:37)
【技术支持|常见问题】安全超文本传输协议 {源码分享}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部