码迷,mamicode.com
首页 > 数据库 > 详细

Spring-JDBC模板-事务

时间:2019-01-17 16:55:20      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:事务管理   nsa   导致   位置   pre   结果   完整   抛出异常   upd   

Spring-JDBC模板-事务

1.事务概述

什么是事务

  • 逻辑上的一组操作,组成这组操作的各个单元要么全部成功要么全部失败

事务的特点ACID

  • 原子性:事务不可分割(事务要么成功,要么失败)
  • 一致性:事务前后数据完整性保持一致(事务操作前后数据要保持一致,不能操作一半发生数据错误)
  • 隔离性:一个事务的执行不受其他事务的干扰
  • 持久性:一旦事务结束,数据就持久化到数据库

如果不考虑隔离性引发安全性问题

读问题
  • 脏读 :一个事务读到另一个事务未提交的数据
  • 不可重复读 :一个事务读到另一个事务已经提交的update的数据,导致一个事务中多次查询结果不一致
  • 虚读、幻读 :一个事务读到另一个事务已经提交的insert的数据,导致一个事务中多次查询结果不一致。

    写问题
  • 丢失更新

2.事务概述Spring的事务的传播行为

什么是传播行为
  • 一个业务方法当中,调用另一个业务的方法
Spring中提供了七种事务的传播行为
  • 保证多个操作在同一个事务中
    • PROPAGATION_REQUIRED:默认值,如果A中有事务,使用A中的事务,如果A没有,创建一个新的事务,将操作包含进来
    • PROPAGATION_SUPPORTS:支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。
    • PROPAGATION_MANDATORY:
      如果A中有事务,使用A中的事务。如果A没有事务,抛出异常。
  • 保证多个操作不在同一个事务中
    • PROPAGATION_REQUIRES_NEW:
      如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含自身操作。如果A中没有事务,创建一个新事务,包含自身操作。
    • PROPAGATION_NOT_SUPPORTED:
      如果A中有事务,将A的事务挂起。不使用事务管理。
    • PROPAGATION_NEVER:
      如果A中有事务,报异常。
  • 嵌套式事务
    • PROPAGATION_NESTED:
      嵌套事务,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点
      执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置,也可以回滚到保存点

3.Spring事务管理

添加事务

  • 编程式事务
    • 需要手动编写代码
    • 步骤:

            1.配置平台事务管理器
                <!--配置事务管理器-->
                  <bean id="transactionManager" 
                        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                    <property name="dataSource" ref="dataSource"/>
                  </bean>
            2.Spring提供了事务管理的模板类
                 <!--配置事务管理模板-->
                  <bean id="transactionTemplate"
                        class="org.springframework.transaction.support.TransactionTemplate">
                    <property name="transactionManager" ref="transactionManager"/>
                  </bean>
            3.在业务层注入事务管理的模板
      
            4.编写事务管理的代码
  • 声明式事务

    • XML方式声明事务管理

            1.引入aop的开发包
            2.配置事务管理器
                <bean id="transactionManager"
                        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                    <property name="dataSource" ref="dataSource"/>
                  </bean>
            3.AOP的配置
                <tx:advice id="txAdvice" transaction-manager="transactionManager">
                    <tx:attributes>
                      <tx:method name="*" propagation="REQUIRED"/>
                    </tx:attributes>
                  </tx:advice>
            配置
    • 注解方式声明事务管理

             配置事务管理器
      
            开启注解事务
      
            在业务层添加注解

Spring-JDBC模板-事务

标签:事务管理   nsa   导致   位置   pre   结果   完整   抛出异常   upd   

原文地址:https://www.cnblogs.com/zhou-shi-yuan-ISO8859-1/p/10283039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!