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

magento网站迁移合肥网站优化平台

magento网站迁移,合肥网站优化平台,商品网站怎么做的,wordpress页脚设置引言 Spring事务一般我们采用注解实现,但是我们构造事务实现的时候常常没察觉失效的情况,本篇文章总结事务失效的六大情况,帮助我们深刻理解事务失效的边界概念 1. 方法自调用 这个主要是针对声明式事务的,经过前面的介绍&…

引言

Spring事务一般我们采用注解实现,但是我们构造事务实现的时候常常没察觉失效的情况,本篇文章总结事务失效的六大情况,帮助我们深刻理解事务失效的边界概念

1.  方法自调用

这个主要是针对声明式事务的,经过前面的介绍,小伙伴们其实也能够看出来,声明式事务底层其实就是 AOP,所以在声明式事务中,我们我们拿到的服务类并不是服务类本身,而是一个代理对象,在这个代理对象中的代理方法中,自动添加了事务的逻辑,所以如果我们直接方法自调用,没有经过这个代理对象,事务就会失效。

我写一段伪代码小伙伴们一起来看下:

public class UserService{@Transactionalpublic void sayHello(){}
}

此时,如果我们在 UserController 中注入 UserService,那么拿到的并不是 UserService 对象本身,而是通过动态代理为 UserService 生成的一个动态代理类,这个动态代理就类似下面这样(伪代码):

public class UserServiceProxy extends UserService{public void sayHello(){try{//开启事务//调用父类 sayHello//提交事务}catch(Exception e){//回滚事务}}
}

所以你最终调用的并不是 UserService 本身的方法,而是动态代理对象中的方法。

因此,如果存在这样的代码:

public class UserService{@Transactionalpublic void sayHello(){}public void useSayHello(){sayHello();}
}

在 useSayHello 中调用 sayHello 方法,sayHello 方法上虽然有事务注解,但是这里的事务不生效(因为调用的不是的动态代理对象中的 sayHello 方法,而是当前对象 this 的 sayHello 方法)。

 

2.  异常被捕获

如果我们在 sayHello 方法中将异常捕获了,那么动态代理类中的方法,就感知不知道目标方法发生异常了,自然也就不会自动处理事务回滚了。还是以前面的 UserServiceProxy 为例:

public class UserServiceProxy extends UserService{public void sayHello(){try{//开启事务//调用父类 sayHello//提交事务}catch(Exception e){//回滚事务}}
}

如果调用调用父类 sayHello的时候,sayHello 方法自动将异常捕获了,那么很明显,这里就不会进行异常回滚了。 

3. 方法非 public

这个算是 Spring 官方的一个强制要求了,声明式事务方法只能是 public,对于非 public 的方法如果想用声明式事务,那得上 AspectJ。

4. 非运行时异常

这个前面 5.3 小节介绍过了,默认情况下,只会捕获 RuntimeException,如果想扩大捕获范围,可以自行配置。

5. 不是 Spring Bean

基于 6.1 小节的理解,来看这个应该也很好懂。声明式事务主要是通过动态代理来处理事务的,如果你拿到手的 UserService 对象就是原原本本的 UserService(如果自己 new 了一个 UserService 就是这种情况),那么事务代码在哪里?没有事务处理的代码,事务自然不会生效。

声明式事务的核心,就是动态代理生成的那个对象,没有用到那个对象,事务就没戏。

6. 数据库不支持事务

这个没啥好说,数据库不支持,Spring 咋配都没用。

总结

Spring 事务常以注解实现,但存在多种可能导致失效的情况。方法自调用因未通过代理对象调用,事务逻辑未执行而失效;异常被捕获,动态代理无法感知异常,无法自动回滚;非 public 方法不符合 Spring 官方对声明式事务的要求而失效;默认仅捕获运行时异常,非此类异常会使事务失效,除非自行配置扩大捕获范围;若对象非 Spring Bean,无事务处理代码,事务不生效;当数据库本身不支持事务时,Spring 配置也无效 。

http://www.dt0577.cn/news/55058.html

相关文章:

  • 网站建设项目验收报告书站长
  • 云霄建设局网站南通seo
  • 在网站怎么做收款二维码关键词优化公司前十排名
  • 数字域名有哪些网站东莞网站推广及优化
  • 网站建设费用IP网络销售网站
  • 专门做网站的公司与外包公司有哪些现在推广什么app最挣钱
  • 购买网站需要注意什么网站友链查询源码
  • 姜堰区区网站建设一个关键词要刷多久
  • 做的公司网站风格跟样式和别人一样免费的企业黄页网站
  • 网页设计购物网站模板友情链接系统
  • wordpress oss 内网搜索引擎优化入门
  • pc网站开发成app难度广州网站营销seo
  • 搭建网站怎么做互联网推广平台有哪些
  • 什么是b s网站开发模式站长工具综合权重查询
  • 崇左网站建设免费网站推广软文发布
  • 公司网站建设一定要求原图吗重庆百度seo
  • 微信小程序制作教学北京seo运营
  • 哪里有网站建设哪家好镇江seo公司
  • 宁波企业网石家庄seo推广公司
  • 小学学校网站建设方案seo整站优化新站快速排名
  • 搭建门户网站费用是多少友谊平台
  • 怎么做搜索网站账户竞价托管哪里好
  • wordpress .mo淄博seo推广
  • 珠海市研发网站建设中国今日新闻
  • aaa云主机怎么做网站查询网站注册信息
  • 什么网站可以做注册任务廊坊seo推广
  • 哪个网站做系统怎么推广网址
  • 搜狐快站做淘宝客网站网络营销好不好
  • 南漳网站开发电商网站建设方案
  • 百度不收录我的网站网站排名优化服务