spring事务:同一个类中无事务方法a()内部调用有事务方法b()的问题

本文探讨了在Spring中,一个无@Transactional注解的方法内部调用有@Transactional注解的方法时,事务处理可能失效的情况。事务的4种特性——原子性、一致性、隔离性和持久性被提及。在默认的Propagation.REQUIRED传播属性下,内部调用的事务不会独立执行,导致可能的预期事务行为未生效。解决方案包括避免事务嵌套、通过AopProxy上下文获取代理对象或者调整事务传播属性。
摘要由CSDN通过智能技术生成

同一类中a()方法没有@Transactional 注解,在其内部调用有@Transactional 注解的方法,有@Transactional 注解的方法b()的事务被忽略,不会发生回滚。

1. 事务的4种特性  

序号       参数                                    含义
1    原子性(Atomicity)            事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。
2    一致性(Consistemcy)      事务前后,数据库的状态都满足所有的完整性约束。
3    隔离性(Isolation)             并发执行的事务是隔离的,一个不影响一个。通过设置数据库的隔离级别,可以达到不同的隔离效果
4    持久性(Durability)            在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
 

2.Transactional()控制事务传播的配置项目(默认Propagation.REQUIRED)

   @Transactional(propagation=Propagation.REQUIRED)           //控制事务传播。默认是Propagation.REQUIRED
    @Transactional(isolation=Isolation.DEFAULT)                //控制事务隔离级别。默认跟数据库的隔离级别相同
    @Transactional(readOnly=false)                             //控制事务可读写、只可读。默认可读写
    @Transactional(timeout=30)                                 //控制事务的超时时间,单位秒。默认跟数据库的事务控制系统相同
    @Transactional(rollbackFor=RuntimeException.class)         //控制事务遇到哪些异常会回滚。默认是RuntimeException
    @Transactional(rollbackForClassName=RuntimeException)      //同上
    @Transactional(noRollbackFor=NullPointerException.class)   //控制事务遇到哪些异常不会回滚。默认遇到RuntimeException回滚
    @Transactional(noRollbackForClassName=NullPointerException)//同上

3.事务的7中传播特性4. 事务的传播案例:

 注:这里的Propagation是事务的传播行为࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值