Spring框架事务的开启
一、Spring中事务的隔离级别
此处涉及到数据库事务的四大特征:ACID---隔离性引发的问题 ;
MySQL默认隔离级别是:REPEATABLE_READ
二、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(事务状态)来了解事务的运行状态。
三、Spring中事务的具体配置方法
1、利用XML+aop的配置方式
该方式方便将事务进行统一管理
<!-- 配置事务 --> <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"/>
2.2 在需要事务处理的类中添加注解
@Transactional
params: readOnly,是否只读,true为只读,false为非只读;
params: propagation,设定事务的传播行为
相关推荐
牧场SZShepherd 2020-07-20
与卿画眉共浮生 2020-11-13
smalllove 2020-11-03
hellowordmonkey 2020-11-02
丽丽 2020-10-30
周太郎 2020-10-28
greensomnuss 2020-10-27
职业炮灰 2020-10-16
与卿画眉共浮生 2020-10-14
feinifi 2020-10-14
feinifi 2020-10-13
yangjinpingc 2020-10-09
davis 2020-09-29
RickyIT 2020-09-27
lisongchuang 2020-09-27
tangxiong0 2020-09-03
meleto 2020-08-17
幸运小侯子 2020-08-14