java实现事务一致性(@Transactional注解的使用)

为什么要实现事务一致性?通常在一个服务中,新增或修改操作功能常常会涉及操作多张表,当发生异常时,极大可能会产生脏数据,若实现事务一致性,可避免这些操作带来的脏数据的产生。
那什么是事务呢?那就简单介绍一下:事务管理是应用系统开发中心不可少的一部分,Spring为事务管理提供了丰富的功能支持。Spring事务管理分为编程式和声明式两种方式。编程式事务指的是通过编码方式实现事务,在此不做过多赘述;声明式事务基于AOP,将具体业务逻辑与事务处理器解耦。声明式事务管理使业务代码逻辑不受污染,因此在实际使用中声明式事务使用比较多。声明式事务有两种实现方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional注解的方式来实现事务一致。
使用@Transactional注解注意事项:
1.当把@Transactional注解放在类级别时,表示该类的所有公共方法都配置相同的事务属性信息。
2.当类级别配置了@Transactional注解,方法级别也配置了@Transactional注解,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖类级别的相关配置信息。
3.@Transactional只能应用到public方法才有效。
4.避免Spring的AOP的自调用问题,在Spring的AOP代理下,只有目标方法由外部调用,目标方法才由Spring生成代理对象来管理。
5.若数据库引擎不对,事务不会生效,对于mysql数据库,当引擎为InnoDB才能生效。
6.Spring事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚。
7.@Transactional注解的类需要被代理才能生效(对于微服务,需要使用@Service注解实现代理)。
8.运行期异常需要往外抛时才能被事务管理捕获,若方法未抛异常,则@Transactional注解无法实现回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值