目录
#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
的思想 ,对我们配置的方法,进行了增强,使用了事务,底层可能使用了 环绕通知
;