一、什么是声明式事务控制?
介绍:
声明式事务控制,是采用声明的方式进行事务管理。所谓的声明,指的就是在配置文件中进行配置。
通过声明式(配置)的方式来处理事务,代替编码式事务控制
作用
松耦合:事务管理不入侵开发的组件
业务逻辑代码中,没有事务的代码,甚至不会意识到正在事务当中。
事实上也应该如此,业务逻辑代码只处理业务功能,事务控制是属于系统层面的服务;如果想要更改事务,只需要在配置文件中重新配置即可
能以模板的方式使用
Spring的声明式事务以AOP为基础,但是几乎是固定的配置模板,即使不懂AOP,也可以配置实现事务管理
易维护。
在不需要事务管理的时候,只需要在配置文件中进行修改,即可把事务管理移除掉,而不需要修改源码,方便维护
二、XML的事务控制
步骤:
-
在配置文件中增加aop和tx的名称空间
-
配置事务的通知
-
配置切面,把事务通知织入到方法中
<!--=======================配置事务 开始============================-->
<!--配置事务管理器:根据dao层用的什么技术,来决定用哪个事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--从切入点表达式选中的所有方法里,挑出来一批方法,单独配置事务-->
<tx:method name="query*" propagation="REQUIRED" isolation="DEFAULT" timeout="-1" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!--配置aop切面-->
<aop:config>
<!--选中要进行事务控制的方法:使用切入点表达式。 配置什么样的事务,使用advice-ref配置-->
<aop:advisor advice-ref="txAdvice" pointcut="execution(切入点表达式)"></aop:advisor>
</aop:config>
<!--=======================配置事务 结束============================-->
aop:config
:切面配置
aop:advisor
:把事务的配置,都放到一个tx:advice
里。在这里引入tx:advice
tx:advice
:事务通知配置
tx:advice标签:配置事务的详细信息
id属性:唯一标识
transaction-manager属性:配置事务管理器的id
tx:method标签:从切入点表达式选中的方法里,再挑选一批,做详细的事务配置
name属性:方法名称,可以用通配符
isolation属性:配置事务的隔离级别
propagation:配置事务的传播行为
timeout属性:配置事务的超时时间
read-only属性:配置事务是否只读
三、注解的事务控制
实现
-
如果某一个方法需要事务,就在方法上加注解
@Transactional
-
如果某一个类里所有方法都要事务,就在类上加注解
@Transactional
修改配置文件:
<!--=======================配置事务 开始============================-->
<!--配置事务管理器:根据dao层用的什么技术,来决定用哪个事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--开启事务注解驱动-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--=======================配置事务 结束============================-->
注解
@Transactional
加在 需要进行事务控制的方法/类上,用于代替xml配置中的
tx:advice
和事务切面的aop:config
isolation
属性:设置事务的隔离级别,从枚举Isolation
中取值
propagation
属性:设置事务的传播特性,从枚举Propagation
中取值
readOnly
属性:设置是否是只读的
timeout
属性:设置超时时间,单位秒。-1表示不限制
如果是纯注解,开启事务的注解驱动,需要在核心配置类上增加注解:@EnableTransactionManagement