在Spring的声明式事务使用过程中,是否遇到过@Transactional不起作用的情况?请看代码:
@Transactional(propagation=Propagation.REQUIRED)
public TradeData placeTrade(TradeData trade){
try {
insertTrade(trade); //方法1
updateAcct(trade); //方法2
return trade;
} catch (SQLException ex) {
//log the error throw ex;
}
}
上述代码中,@Transactional会起到织入事务管理的作用吗?
答案是否。
原因是:
运行时异常(未捕获的异常)会强迫整个事务逻辑单元回滚,但是被捕获的异常则不会。
所以,要想让@Transactional起作用,则需在实际逻辑处理中,把遇到的异常抛出。上面的例子可以这么写:
@Transactional(propagation=Propagation.REQUIRED)
public TradeData placeTrade(TradeData trade) throws SQLException{
insertTrade(trade); //方法1
updateAcct(trade); //方法2
return trade;
}
分享到:
相关推荐
### Spring JdbcTemplate与声明式事务知识点详解 #### JdbcTemplate基本使用概述 JdbcTemplate是Spring框架提供的用于简化JDBC API操作的对象。它通过提供一个高级抽象层来减少编码工作量,并帮助开发者避免处理...
在同一个方法中同时使用了@Transactional注解和编程式事务管理(如TransactionTemplate),可能导致事务失效。确保只选择一种方式进行事务管理。 6. 事务传播属性配置不当: @Transactional注解中的propagation属性...
Spring通过AOP(面向切面编程)提供了一种声明式事务管理方式,允许开发者将事务规则与业务逻辑分离,提高了代码的可读性和可维护性。本文将深入探讨Spring AOP事务管理的核心概念、配置、以及可能遇到的问题和解决...
Spring框架通过`DataSourceTransactionManager`实现了对JDBC事务的支持,开发者可以通过编程式或声明式的方式控制事务。 2. **对Hibernate/JPA事务的支持** - **Hibernate**: Spring通过`...
5. **事务管理**:Spring的声明式事务管理使得事务处理变得简单,无需在代码中显式控制。书中会介绍如何配置事务管理器,以及@Transactional注解的使用。 6. **Spring与其他框架集成**:Spring的开放性使其能够与...
Spring框架广泛支持声明式事务管理,通过@Transactional注解可以轻松指定事务属性,如传播行为、隔离级别和回滚规则。 ### XA事务处理 对于涉及多个资源管理器的分布式事务,XA协议是实现两阶段提交的关键。两阶段...