本篇内容主要讲解“Spring Aop事务管理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Aop事务管理是什么”吧!
10年积累的做网站、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有九龙坡免费网站建设让你可以放心的选择与我们合作。
同一个类中A方法调用B方法时,如果在B方法上面设置事务,B方法的事务不会生效,因为A方法不是通过代理对象访问的,因此事务增强没有生效。但需要注意的是,如果A方法上配置了事务,A和B是一个事务管理器管理的,则B方法还是在A方法的事务上下文中执行。
/**
* 外层方法没有配置事务,验证调用同类方法时的场景:
* 1、方法B配置事务、执行数据库操作后抛出异常,数据不会回滚:因为方法内调用事务没生效
* 2、同上,通过代理对象访问,事务回滚
*/
public void pureA_tranB_throw() {
// 没有事务,事务正常提交
db1Op();
// 1、不会回滚,因为方法内调用事务没生效
//traB_throw();
// 2、通过代理对象,事务会回滚
C1Services c1Services = (C1Services) AopContext.currentProxy();
c1Services.traB_throw();
throw new RuntimeException("test rollback");
}
@Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
public void traB_throw() {
db1Op();
throw new RuntimeException("test rollback");
}
/**
* 外层方法配置事务,验证调用同类方法时的场景:
* 1、方法B配置事务、执行数据库操作后抛出异常,虽然B方法未启用事务的增强,但和外层事务属于同一个事务管理器,数据会回滚
*/
@Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
public void traA_traB_throw() {
// 有外层事务,事务会回滚
db1Op();
// 1、会回滚,因为虽然方法B的事务没失效,但是外层属于同一个事务管理器,因此外层事务会控制其回滚
traB_throw();
throw new RuntimeException("test rollback");
}
同一个类中A方法调用B2方法,A和B2的事务管理器不一样,A方法上配置事务,B2上配置事务,B2执行异常。如果是A方法直接调用B2方法,B2不会回滚,同上因为事务增强没生效,但通过代理对象访问可以回滚。
/**
* 外层方法配置事务,验证不同数据库操作的场景:
* 1、不会回滚,B2方法的事务增强未生效,且B2和外层方法不是一个事务管理器,所以不会受外层事务影响
* 2、会回滚,B2方法的事务增强生效,执行异常,事务回滚
*/
@Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
public void traA_traB2_throw() {
// 有事务,事务会回滚
db1Op();
///1、不会回滚,事务增强没生效
//traB2_throw();
// 通过代理对象,事务会回滚
C1Services c1Services = (C1Services) AopContext.currentProxy();
c1Services.traB2_throw();
throw new RuntimeException("test rollback");
}
@Transactional(rollbackFor = RuntimeException.class, value = "db2transactionManager")
public void traB2_throw() {
db2();
throw new RuntimeException("test rollback");
}
不同类中C1类的A方法调用C2类的B方法,通过类的实例对象调用B方法,如果B方法设置事务,因为是通过代理对象访问,因此事务增强会生效。
事务的传播行为有:
REQUIRED 支持当前事务,如果当前事务不存在,则创建新事务。是spring事务管理的默认隔离级别
SUPPORTS 支持当前事务,如果当前事务不存在,则按照无事务运行
MANDATORY 支持当前事务,如果当前事务不存在,则抛出异常
REQUIRES_NEW 创建一个新事务,如果当前事务存在,则挂起当前事务
NOT_SUPPORTED 按照无事务运行,如果当前事务存在,则挂起当前事务
NEVER 按照无事务运行,如果当前事务存在,则抛出异常
NESTED 如果当前事务存在,则按照嵌套事务的方式执行,在特别的事务管理器上才会创建嵌套事务,一些JTA的提供者支持嵌套事务管理器
到此,相信大家对“Spring Aop事务管理是什么”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
本文题目:SpringAop事务管理是什么
URL分享:http://scpingwu.com/article/ihepog.html