当前位置: 首页 > news >正文

十堰企业网站制作公司广告公司网页页面设计模板

十堰企业网站制作公司,广告公司网页页面设计模板,wordpress 图片轮播插件下载,设计网站app场景如下#xff1a; A_Bean 中的方法a()中调用B_Bean的b();方法都开启了事务#xff0c;使用的默认的事务传递机制#xff08;即#xff1a;属于同一事务#xff09;#xff1b; 如下两种场景会存在较大的差异#xff1a; 在b()方法中出现了异常#xff0c;在b()中进…场景如下 A_Bean 中的方法a()中调用B_Bean的b();方法都开启了事务使用的默认的事务传递机制即属于同一事务 如下两种场景会存在较大的差异 在b()方法中出现了异常在b()中进行捕获并处理且没有抛出新的异常事务最终会进行提交在b()方法中出现了异常在a()中进行捕获并处理且没有抛出新的异常那么事务最终会如何呢—— 先给结论事务回滚 这个小差异平时编程的过程比较难留意到会简单认为当某个方法上面开启了事务并且当前方法没有抛出任何异常最终方法上面的事务一定会提交。其实这里是存在认知错误的。 code如下 SpringBootTest public class TransactionTest {Autowiredprivate A a;Testvoid testTransaction() throws Exception {a.a();}}Service public class A {Autowiredprivate B b;Transactionalpublic void a() {try {b.b();} catch (Exception e) {log.error(b执行异常进行捕获且不抛出异常);}// for some db operation}}Service public class B {Transactionalpublic void b() {// for some db operationthrow new RuntimeException(b-error);} }} 为何错误 当 a() 方法调用 b() 方法时如果两个方法都开启了事务且采用默认的事务传播行为即事务嵌套b() 方法的事务会加入到 a() 方法的事务中成为同一个事务。那么b()中出现异常b中没有捕获而在a中捕获实则已经触发b()的事务处理异常的逻辑。而a、b方法执行又同属一个事务在b异常被事务管理器感知到后就会将当前事务标记为rollback那么即使a最终没有感知到异常最终a正常执行完毕后a上面的事务管理逻辑也不会将事务进行提交而是采取回滚的决定 源码分析 当一个事务方法执行出现异常时比如b()执行抛出异常时 org.springframework.transaction.interceptor.TransactionAspectSupport#completeTransactionAfterThrowing org.springframework.transaction.support.AbstractPlatformTransactionManager#rollback org.springframework.transaction.support.AbstractPlatformTransactionManager#processRollback org.springframework.jdbc.datasource.DataSourceTransactionManager#doSetRollbackOnly org.springframework.jdbc.datasource.DataSourceTransactionManager.DataSourceTransactionObject#setRollbackOnly org.springframework.transaction.support.ResourceHolderSupport#setRollbackOnly 当a()正常执行完毕准备提交事务时 org.springframework.transaction.interceptor.TransactionInterceptor#invoke org.springframework.transaction.interceptor.TransactionAspectSupport#invokeWithinTransaction org.springframework.transaction.interceptor.TransactionAspectSupport#commitTransactionAfterReturning org.springframework.transaction.support.AbstractPlatformTransactionManager#commit org.springframework.transaction.support.SmartTransactionObject#isRollbackOnly org.springframework.jdbc.datasource.DataSourceTransactionManager.DataSourceTransactionObject#isRollbackOnly a执行完毕会进行判断 最终还是会进行事务的回滚 在 Spring 中当事务被标记为 rollback-only 时它会通知事务管理器表示事务应该回滚。即使没有抛出新的异常一旦事务被标记为 rollback-only最终事务仍然会回滚。 因此在你的情况下如果 b() 方法中出现异常在 a() 方法中进行了捕获并处理但是事务在 b() 方法中被标记为 rollback-only最终会导致 a() 方法的事务回滚。 如果有这种需要该如何处理 如题a事务嵌套b事务不管b事务是否执行成功只有a中最终没有抛出异常那么就需要将a提交做到a事务不受内部嵌套事务的影响该如何 修改b事务的传播配置
http://www.pierceye.com/news/943559/

相关文章:

  • 国外网站模板欣赏WordPress 编辑器修改默认字号
  • 厦门同安网站建设视频购物网站开发方案
  • 什么是建设网站的主题兼职做问卷调查的网站
  • 装饰网站建设软件下载公司旅游视频网站模板免费下载
  • aws网站建设个体户做网站去哪里做
  • 用四字成语做网站域名好吗宁波网站推广专业服务
  • 深圳网站建设公司是网络推广网上营销
  • 网站视频站建设教程和仿qq商城版淘宝客网站源码模板+带程序后台文章dede织梦企业程序
  • 温州红酒网站建设长沙移动网站建设
  • 如何制作网站?企业网站制作步骤
  • 桓台县旅游网站建设购物网站建设技术难点
  • 单页网站推广网站qq链接怎么做
  • wordpress仿站步骤平乡网站建设
  • 青岛高端网站建设公司新网站seo技术
  • 手机网站后台甘肃网络推广技巧
  • 做co网站阿里云建站方案
  • 如何做网站首页优化怎么查网站点击量
  • 北京网站制作百度推广潜江资讯网二手房出售
  • 北京建网站软件深圳企业网站
  • 网站关键词互点备案网站简介怎么写
  • 网站建设报告书范文哈尔滨网站公司哪家好
  • 景观毕业设计作品网站公司网站销售平台建设费分录
  • 品牌网站建设还来大蝌蚪华为手机WordPress
  • 东莞制作企业网站公司网站营销活动页面制作
  • 有中文网站 怎么做英文网站企业网站建设 价格
  • 网络游戏网站开发建设工程施工合同样本
  • 陕西网站制作公司泸州中泸集团建设有限公司网站
  • 营销型网站建设的概念电子商务公司最低注册资本
  • 计划书网站推广的目录怎么做太原便宜做网站的公司哪家好
  • wordpress 直播插件麒麟seo外推软件