Spring框架事务的开启
Posted 18岁程序员想当歌手
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架事务的开启相关的知识,希望对你有一定的参考价值。
一、Spring中事务的隔离级别
可以分为三类:
1、PROPAGATION_REQUIRED(默认类型)、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY 属于:支持当前事务。如:A调用B,如果A事务存在,B和A处于同一个事务事务默认传播行为是:REQUIRED;
2、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER 属于:不会执行原来的事务。如:A调用B,如果A事务存在,B肯定不会和A处于同一个事务;
3、PROPAGATION_NESTED 属于:嵌套事务,只对DataSourceTransactionManger起效,底层使用JDBC的SavePoint机制,允许在同一个事务设置保存点,回滚保存点。
用户管理事务,需要先配置TransactionDefinition(事务定义信息,事务的管理方案),然后根据需要先配置TransactionDefinition,通过TransactionManager(事务管理器)进行事务管理,事务运行过程中,每个时刻都可以通过TransactionStatus(事务状态)来了解事务的运行状态。
<!-- 配置事务 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 定义事务的传播行为 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 所有以update delete save开头的方法都进行事务管理 --> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*"/> <tx:method name="save*"/> <!-- 查询不做事务处理 --> <tx:method name="find*" read-only="true"/> <tx:method name="get*" read-only="true"/> <tx:method name="select*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 定义切面 --> <aop:config> <aop:pointcut expression="execution(* org.service.*.*(..))" id="myPointcut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/> </aop:config>
2、XML+注解的方式
<!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 使用事务注解@Transational来给具体的方法添加事务要求,缺点是不能统一处理,使用tx:advice方式来进行aop处理则可以统一处理事务 --> <tx:annotation-driven transaction-manager="transactionManager"/>
在需要事务处理的类中添加注解
@Transactional
params: readOnly,是否只读,true为只读,false为非只读;
params: propagation,设定事务的传播行为
以上是关于Spring框架事务的开启的主要内容,如果未能解决你的问题,请参考以下文章