自己开发过程中遇到了不明白的问题,然后测试了下。觉得可以拿出来做个面试题了。
@Transactional
public class testService{
public void func3() throws Exception{
func2();
}
public void func2()throws Exception{
try{
func1();
}catch(Exception e){
e.printStackTrace();
}
}
public void func1()throws Exception {
jdbcDao.execute("update cs_repay_amortization set payment_way ='2' where id=1");
int i =1/0;
}
}
主要配置:
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<!-- 配置事务属性 -->
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED, -Exception</prop>
</props>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
问题是:数据库操作update会回滚还是执行修改呢?
经测试,结果是执行了修改,并没有回滚。我理解的是到最后其实并没有抛出异常,所以没回滚。
然后把func2中的处理异常去掉,将会回滚。已经测试。
注意:
@Transactional 只能被应用到public方法上
对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.
分享到:
相关推荐
Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...
本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...
Spring 框架是Java开发中...理解并熟练掌握Spring事务管理,对于提升应用程序的稳定性和可靠性至关重要。在实际开发中,结合声明式事务管理、事务传播行为、隔离级别和回滚规则,可以有效地确保数据的完整性和一致性。