当前位置:   article > 正文

Spring中@transactional原理_spring事务@trancation原理

spring事务@trancation原理

一、一般编程式事务管理

1.开启事务
2.执行dao处理
3.提交或回滚事务

二、spring声明式事务管理,好处代码清晰,重复少

1.开启注解(两种方法)

1)@EnableTransactionManagement
2) xml配置开启

<tx:annotation-driven />
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
  • 1
  • 2
  • 3
  • 4
  • 5

2.@Transactional 注解添加到需要的方法和类上面

3.注意@Transactional配置参数

org.springframework.transaction.annotation.Transactional包看源码,默认值
Propagation.REQUIRED
Isolation.DEFAULT

三、理解@Transactional过程

aop,代理对象会在执行@Transactional注解的方法前开启事务,根据执行结果,代理对象会在方法后回滚或提交事务。

org.springframework : spring-tx包
Transactional注解在
org.springframework.transaction.annotation.Transactional
注解后置处理,扫描并处理Transactional注解的接口是
org.springframework.transaction.annotation.TransactionAnnotationParser
找到相应的实现类就是注解事务处理

四、注意

理解就是为了防止出现系统抛异常,事务没有回滚而出错

1.三种 propagation 不启动事务

TransactionDefinition.PROPAGATION_NOT_SUPPORTED
TransactionDefinition.PROPAGATION_SUPPORTS
TransactionDefinition.PROPAGATION_NEVER

2.不是所有异常都会回滚

rollbackFor=异常类(非继承自 RuntimeException 的异常)(spring默认RuntimeException会使事务回滚)

3.@Transactional只能用在public方法

一般都是注解在控制器直接调用的service层的public方法上

4.未被@Transactional注解的方法调用被@Transactional注解的方法,事务无效,spring AOP

理解:就是Transactional注解的事务是由spring来帮你开启事务的,但是spring是使用aop调用你的方法
method.invoke
如果你的方法内部调用了带有Transactional注解的方法,spring不知道,所有就没有开启事务
  • 1
  • 2
  • 3

src:https://www.ibm.com/developerworks/cn/java/j-master-spring-transactional-use/index.html

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号