声明式事务

时间:2019-09-23
本文章向大家介绍声明式事务,主要包括声明式事务使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

声明式事务

1 事务与声明式事务的区别

1.事务:

把多个操作绑定在一起,要么全部成功,要么全部失败

2.声明式事务:

在程序中,指定开启或回滚事务的规则,程序根据设定好的规则,自动开启或回滚事务

2 声明式事务

2.1 我们第一步找到spring的配置文件
2.2 第二步我们就需要在你的标签里添加一下代码
<!-- 定义事务管理器 -->
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

ref=dataSource:这个dataSource是配置我们spring和MyBatis整合配置数据源的、

详情请看文档的第三点:spring和mybatis整合

2.3 设置事务属性
<!--  设置事务属性-->
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
       <!-- 声明事务属性,定义事务开启规则-->
        <tx:attributes>
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"  />
            <tx:method name="get*" propagation="SUPPORTS" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>

我们的事务属性这里就简约的说一下事务传播机制:

SUPPORTS

表示如果存在一个事务,则支持当前事务,如果没有,则按非事务方式执行

REQUIRED

表示如果存在一个事务,则支持当前事务,如果没有,则自己开启一个新的事务

补充:

REQuIRES_NEW:

表示总是开启一个新事务,如果一个事务已经存在,则将这个存在的挂起,开启新的事务

还有等等 比如NESTED....

而这个标签的name属性里面填写的是,你需要做的增删改查功能是什么需要开启事务传播机制

2.4 定义切面

因为我们事务是在spring增强的功能上实现的,所以我们还需要定义切面

<!-- 定义切面-->
 <aop:config>
 <!--   定义切面-->
    <aop:pointcut id="serviceMethod" expression="execution(* com.t239.service..*.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
</aop:config>

我们这就完成了声明式事务,我们还有一种方法就是使用注解形式

3 注解事务

我们做注解事务就更加简单一点:

3.1 首先我们第一步还是先定义事务管理器
<!-- 定义事务管理器 -->
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>
3.2 我们第二步启动注解事务

将定义的事务管理器添加进去

<!-- 启动注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
3.3 我们就可以在你的需要事务处理的方法前加注解

我们通过注解进行事务回滚,以及提交,注解如下:

@Transactional

将这个注解添加到类前面,这个类所有的方法有有事务回滚提交功能

将这个添加到方法前,就只能对方法使用

Transactional的属性不止一种,有很多比如:

@Transactional(propagation= Propagation.SUPPORTS)
@Transactional(propagation=Propagation.REQUIRED)

等等等,这里就不一一解释说明了

原文地址:https://www.cnblogs.com/liujunwei/p/11573273.html