(八)Spring 事务管理
目录
#Spring 的事务管理
-
编程式事务管理(一般不用)所谓编程式,就是我们自己写代码,实现事务管理,这样还不如不用框架呢;
-
声明式事务管理- 基于
xml配置文件实现 - 基于注解实现
- 基于
Spring 事务管理 Api 介绍之 PlatformTransactionManager
几个 api 中,最重要的一个 ;
PlatformTransactionManager(事务管理器 )
-
对于该接口,
Spring针对不同的持久层技术,提供了不同的实现版本;JDBC、iBatis对应的实现类:org.springframework.jdbc.datasource.DataSourceTransactionManager;Hibernate5对应的实现类:org.springframework.orm.hibernate5.HibernateTransactionManager -
配置事务管理器(
配置文件方式)<!--添加 tx 约束--> xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation= "http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" ---------------------------------------------------- <!--配置事务管理器--> <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="dataSourceTransactionManager"> <!--注入数据源--> <property name="dataSource" ref="dataSource"></property> </bean> ---------------------------------------------------- <!--配置事务增强--> <tx:advice transaction-manager="dataSourceTransactionManager" id="interceptor"> <tx:attributes> <!--设置增强规则 countXXX方法--> <!--设置隔离性--> <tx:method name="count*" propagation="MANDATORY"/> </tx:attributes> </tx:advice> ---------------------------------------------------- <!--配置切面--> <aop:config> <!--配置切入点--> <aop:pointcut id="point1" expression="execution(* ijava.xin.aop.UserDao.*(..))"></aop:pointcut> <!--配置切面--> <!--增强对象,和切入点对象--> <aop:advisor advice-ref="interceptor" pointcut-ref="point1"></aop:advisor> </aop:config> -
配置事务管理器(
注解方式)<!--添加 tx 约束--> xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation= "http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" ---------------------------------------------------- <!--配置事务管理器--> <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="dataSourceTransactionManager"> <!--注入数据源--> <property name="dataSource" ref="dataSource"></property> </bean> ---------------------------------------------------- <!--开启事务注解--> <tx:annotation-driven transaction-manager="dataSourceTransactionManager"></tx:annotation-driven>最后在想要开启事务的方法所在类上,写注解
@Transactional;然后spring就会寻找写了该注解的类,为其方法,都开启事务;
这2个,基本不用啥,主要是上面的 事务管理器 ;
TransactionDefinition(事务定义信息)TransactionStatus(事务具体运行状态)
后记
spring 的事务管理,还是使用了 aop 的思想 ,对我们配置的方法,进行了增强,使用了事务,底层可能使用了 环绕通知;

浙公网安备 33010602011771号