先看如下代码
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { AppBizExeA.class } , noRollbackFor = { AppBizExeB.class })
public void method1() throws Exception {
System.out.println("method1 start");
TPerson per = new TPerson();
per.setAge("24");
per.setId(123);
per.setName("xj");
personDao.add(per);
throw new NullPointerException();
}
@Transactional(propagation = Propagation.NESTED, rollbackFor = { AppBizExeA.class })
public void method2() throws Exception {
System.out.println("method2 start");
TPerson per = new TPerson();
per.setAge("24");
per.setId(1234);
per.setName("xj");
personDao.add(per);
System.out.println("method2 end");
}
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:com/benx/benx.xml" });
PersonService service = (PersonService) context.getBean("personService");
service.method1();
}
今天只谈传播行为为REQUIRED的,其他先不谈,因为使用比较少,而且支持也不够好
1、执行service.method1(),不管method里面是否嵌套了method2或其他,事务都是以method1开始和结尾,且事务配置同样以method1为准,忽略其他REQUIRED行为的配置,比如异常机制,以method1为准,忽略method2的异常配置
2、Transactional的异常控制,默认是Check Exception 不回滚,unCheck Exception回滚
3、如果配置了rollbackFor 和 noRollbackFor 且两个都是用同样的异常,那么遇到该异常,还是回滚
4、rollbackFor 和noRollbackFor 配置也许不会含盖所有异常,对于遗漏的按照Check Exception 不回滚,unCheck Exception回滚
分享到:
相关推荐
主要介绍了spring事务异常回滚实例解析,具有一定借鉴价值,需要的朋友可以参考下
Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚,需要了解更多Spring事务方面的知识,可详看本
主要介绍了Spring异常捕获且回滚事务解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
测试spring事务管理 搭建了ssh框架的web工程 本工程用到的数据库表很简单 user(id, name) 可自行创建 本例所有的事务放在service层进行管理,方法中间抛出运行时异常以测试是否回滚 Spring配置文件中关于事务...
高可靠性 :支持分布式场景下,事务异常回滚,超时异常恢复,防止事务悬挂 易用性 :提供零侵入性式的 Spring-Boot, Spring-Namespace 快速与业务系统集成 高性能 :去中心化设计,与业务系统完全融合,天然支持集群...
* 默认事务回滚异常是RuntiimeException(包括所有继承RuntimeException的子类).普通异常不回滚 * 在编写业务逻辑方法时,最好将异常一直往上抛出,由表示层处理(Struts) * spring的事务管理需要添加到业务逻辑上...
用springboot 集成mybatis多数据源,用aop实现的动态切换,支持事务,不会使aop动态切换失效。注意:此代码不涉及分布式事务,如果需要分布式事务 需要采取其他方案。
最后出现异常则统一回滚,负责统一提交; 第一阶段:准备阶段(prepare)协调者通知参与者准备提交订单,参与者开始投票。协调者完成准备工作向协调者回应Yes。 第二阶段:提交(commit)/回滚(rollback)阶段协调者...
3)、ProxyTransactionManagementConfiguration 做了什么? 1、给容器中注册事务增强器; 1)、事务增强器要用事务注解... 如果异常,获取到事务管理器,利用事务管理回滚操作; 如果正常,利用事务管理器,提交事务
为您提供Hmily柔性分布式事务解决方案下载,Hmily是柔性分布式事务解决方案,提供了TCC 与 TAC 模式...功能:高可靠性:支持分布式场景下,事务异常回滚,超时异常恢复,防止事务悬挂易用性:提供零侵入性式的 Spring-
基于LCN 的微服务事务管理项目Demo。管理SpringCloud + springboot微服务之间的事务 处理,异常回滚操作。
抛出异常,事务回滚。最小的执行单位为方法。决定执行成败是通过是否抛出异常来判断的,抛出异常即执行失败。 2、代码 (1) mysql建表语句 CREATE TABLE `t_student` ( `c_id` int(11) NOT NULL AUTO_INCREMENT, `c...
JdbcDaoSupport、使用 NamedParameterJdbcTemplate、Spring 的声明式事务、事务的属性(传播行为、隔离级别、回滚属性、只读属性、过期时间)、使用 XML 文件的方式配置事务、整合 Hibernate、整合 Struts2 等。
先向tb1插一条数据,然后在向tb2插一条数据,当没有设置事务时,如果tb2出现异常,tb1能正常插入数据,当设置了分布式事务后,如果tb2出现异常,tb1会自动回滚,没有数据插入。 分布式事务是针对不同数据库的(当然...
9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...
Spring的事务管理通过AOP代理来实现 根据事务属性,对每个代理对象的每个方法进行拦截, 在方法执行前启动事务, 方法执行完毕后根据是否有异常和异常种类进行... spring 默认通过捕获运行时异常实现事务提交或回滚
如遇异常,回滚事务 关闭Session 24.3 Spring对Hibernate的简化 24.3.1 概述 Spring提供的持久层访问的方式,无须显式地打开和关闭Session,也无须在代码中执行任何的事务操作语句。 Spring提供了HibernateTemplate...
9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...
* 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的 * 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理 * 关于事务边界的设置,通常设置到业务层,...
9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...