@Transactonal 事务
@Transactonal 的实现原理:
通过spring aop对方法进行环绕增强,环绕增强的逻辑:
开启事务()
try{
原方法
}catch(对应的异常 ){
回滚逻辑
}
提交事务
@Transactional 注解属性:
propagation 代表事务的传播行为,默认值为 Propagation.REQUIRED
isolation :事务的隔离级别,默认值为Isolation.DEFAULT
timeout :事务的超时时间,默认值为 -1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
rollbackFor :用于指定能够触发事务回滚的异常类型,可以指定多个异常类型。
@Transactional 注解失效情况:
1.数据库引擎不支持事务
2.没被spring管理
3.方法的修饰符不是public :spring扫描@transactional注解进行方法增强时,对于非public方法,会忽视其@transactional,因此这些方法不会被增强
4.自身调用,类A的方法1调方法2,此时是用this.方法2 而不是代理对象.方法2,绕过了代理,该方法是增强前的方法
5.在方法内捕获了异常 :事务环绕增强的逻辑需要方法抛出对应的异常,如果在方法内部就捕获了异常,那外层就不会catch,自然不会触发回滚逻辑。
6.异常类型错误
7.在同一线程中
8.方法被fianl修饰,无法动态代理
9.传播行为,只有REQUIRED、REQUIRES_NEW、NESTED会创建新的事务

浙公网安备 33010602011771号