`
Colin_Davis
  • 浏览: 25113 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

当 Spring Transactional 遇上 try catch

    博客分类:
  • Java
 
阅读更多

 

    以下情况为单层 Transactional 事务

 

 

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="mysqlDataSource" />
</bean>

<tx:annotation-driven transaction-manager="txManager" />

 

 

@Transactional(rollbackFor = Exception.class)
public int method(Object obj) {
	try {
		doInsert(obj);
		return 1;
	} catch(Exception e) {
		e.printStackTrace();
		//
		//
		// 加入下行代码手动回滚
		// @Transactional 为方法加上事务,try catch 捕获到异常手动回滚事务
		TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
		//
		//
	}
	return 0;
}

 

 

 

 

    以下情况为双层至多层 Transactional 事务

 

 

@Transactional(rollbackFor = Exception.class)
public int method(Object obj) {
	try {
		doInsert(obj);
		return 1;
	} catch(Exception e) {
		e.printStackTrace();
		//
		//
		// 加入下行代码手动回滚
		// @Transactional 为方法加上事务,try catch 捕获到异常手动回滚事务
		if (TransactionAspectSupport.currentTransactionStatus().isNewTransaction()) {
			// 第一次开启事务遇到异常则回滚
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
		} else {
			// 嵌套的事务,当前方法被另一个加了 @Transactional 标注的方法调用
			// 抛出异常告诉上一个事务,让上一个事务判断是否回滚
			// 这样的优点是: 在调用者那边不用根据当前方法返回值来判断是否回滚
			throw e;
		}
		//
		//
	}
	return 0;
}

 

 

分享到:
评论

相关推荐

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    **声明式事务管理** 是通过在方法上添加`@Transactional`注解,让Spring自动管理事务。这种方式更加简洁,降低了代码的复杂性。`@Transactional`可以设置不同的属性,如`propagation`(传播行为)、`isolation`...

    Spring中@Transactional事务回滚(含实例

    如果在`try`块中抛出了需要回滚的异常,即使在`catch`块中没有再次抛出,事务仍会被回滚,因为Spring是在方法级别管理事务,而非`try-catch`块。 七、总结 `@Transactional`注解简化了Java开发中的事务管理,使得...

    浅谈Spring中@Transactional事务回滚及示例(附源码)

    这些异常必须在代码中显式地处理,例如使用try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。checked异常继承自java.lang.Exception。 unchecked异常是指程序的逻辑错误,例如...

    springboot中事务管理@Transactional的注意事项与使用场景

    2. 使用 try-catch 但是需要 throwRuntimeException:在 service 方法中使用 try-catch,但是需要在 catch 中加上 throw new RuntimeException() 可实现事务回滚。 总结 @Transactional 是 Spring 框架提供的一个...

    详细整理Spring事务失效的具体场景及解决方案.docx

    使用 try…catch…语句块捕获,而 catch 语句块没有throw new RuntimeExecption 异常、注解@Transactional 中 Propagation 属性值设置错误、mysql 关系型数据库,且存储引擎是 MyISAM 而非 InnoDB。了解这些常见场景...

    spring 事务传播 demo

    通过声明式事务管理,我们只需在方法上添加@Transactional注解,而无需编写手动的try-catch-finally代码块来管理事务。 在实际应用中,我们还应考虑事务的隔离级别、事务超时和回滚规则等参数,以确保数据的一致性...

    最全的Spring考题与答案

    Spring框架是Java开发中不可或缺的一部分,它以其丰富的功能和易用性深受开发者喜爱。以下是针对题目提供的内容,详细解析Spring框架的相关知识点。 1. **Spring框架的优点** - 分层架构:Spring允许开发者选择...

    spring与hibernate的整合

    然后在 DAO 或 Service 类的方法上添加 `@Transactional` 注解来声明需要事务管理的方法。例如: ```java @Service @Transactional public class DepartmentServiceImpl implements IDepartmentService { @...

    Spring 框架的事务管理及应用

    声明式事务管理是通过配置的方式设置事务的边界,通常通过Spring的`@Transactional`注解或者XML配置来实现。这种方式比编程式事务管理更为简洁和方便。 **示例:传统的JDBC事务管理** 在使用JDBC进行数据操作时,...

    spring_MVC源码

    本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,现在这一篇补上。下面开始贴代码。 文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。 先说...

    spring面试题大全

    例如,定义事务、开始事务、在try-catch块中执行业务逻辑并决定提交或回滚事务。 2. 声明式事务管理:通过注解或XML配置,Spring会自动管理事务的开始、提交、回滚。如使用@Transactional注解标记方法,指定传播行为...

    Spring JDBC实现代码

    在IT行业中,Spring框架是Java开发中的一个核心组件,它为开发者提供了许多便利,包括依赖注入、面向切面编程以及数据库操作等。Spring JDBC模块是Spring框架的一部分,它简化了Java Database Connectivity (JDBC)的...

    Spring经典面试题

    3. **声明式事务管理**:这种方式通过使用Spring的`@Transactional`注解或XML配置来管理事务,使得事务管理更加简洁。这种方式的主要优点在于它不需要在每个方法中都显式地编写事务管理代码。示例代码如下: ```...

    Spring事务管理A方法内部调用B方法的回滚问题测试代码

    如果A方法抛出异常,Spring会根据@Transactional的配置回滚整个事务,包括A方法和B方法中的操作。 ```java @Service public class MyService { @Transactional public void methodA() { // 执行一些操作 try ...

    Spring框架的事务管理应用分析.doc

    Spring支持基于注解的事务管理,例如在方法上添加`@Transactional`注解来指定事务行为。 **Spring事务管理的优势** - **统一的事务策略**:Spring事务管理支持JDBC、Hibernate、JPA等多种数据访问技术,提供了一致...

    spring高级编程详解

    1. **简化代码**:无需在业务代码中添加显式的事务管理逻辑,减少了try-catch-finally等繁琐的代码块。 2. **易于集成**:可以轻松地与现有的Spring应用程序集成,无需对现有代码进行重大更改。 3. **灵活性**:支持...

    Spring事务不生效.pdf

    当在服务层方法上添加@Transactional注解时,Spring会创建一个代理对象来包裹这个方法,当调用这个方法时,实际上是调用了代理对象的方法,从而触发事务的开启、提交或回滚。 1. 访问权限问题: Spring事务管理要求...

    Spring3.2异步处理http请求

    为了捕获和处理这些异常,可以在`@Async`方法中使用`try-catch`块,或者自定义异常处理器。 ### 6. 日志与事务管理 由于异步执行,日志记录和事务管理可能会变得复杂。Spring提供了支持异步方法的日志记录,并通过...

    Spring Boot的事务控制.docx

    在需要事务管理的方法或类上添加`@Transactional`注解,例如: ```java @Service public class BookService { @Autowired private BookRepository bookRepository; @Transactional public void addBook...

Global site tag (gtag.js) - Google Analytics