• Spring之事务管理


    1.什么是事务

               一组业务操作ABCD,要么全部执行,要么全部不执行.

    2.特性:ACID

               原子性:原子是不可分割; 每个事务无论里面包含多少操作,都隶属于一个事务,而一个事务是一个最小的工作单位

               一致性:数据库的改变总是从一种状态到另一种状态,加了事务控制之后,要么全部转换成功,要么全部数据回滚到初始状态

               持久性: 事务一旦提交完成,对数据库的操作时无法回滚无法逆转

               隔离性:一个事务是一个最小工作单位,同时可以有N个事务共同发生作用;各个事务之间互不干扰,且事务之间数据不会共享

    简而言之:同生共死!

    3.隔离问题(自身携带的问题)

               脏读:一个事务读到另一个事务没有提交的数据

               不可以重复读:一个事务读到另一个事务已提交的数据(update)

               虚读:一个事务读到另一个事务已提交的数据(insert)

    4.隔离级别

    read-uncommitted   1           读未提交,存在3个问题

    read-committed      2            读已提交,解决:脏读,存在2个问题     oracle

    repeatable read      4            可重复读,解决:脏读,不可重复读,存在1个     mysql

    serializable              8            串行化。都解决,单事务

    5.事务管理介绍

    5.1创建项目导入jar包:spring-tx-4.3.2.RELEASE.jar

    5.2了解3个顶级接口   

    ①PlatformTransactionManager

    平台事务管理器 Spring要管理事务,必须使用事务管理器

    进行事务配置时,必须配置事务管理器

    ②TransactionDefinition

    事务定义、事务详情、事务属性 ,spring用于确定事务具体详情

    进行事务配置时,必须配置详情,spring将配置项封装到该对象实例

    ③TransactionStatus

    事务状态,spring用于记录当前事务运行状态,例如:是否存在保存点,事务是否完成

    Spring底层根据状态进行相应操作

    6.了解API

    6.1PlatformTransactionManager事务管理器

               导入事务管理器的实现jar

              

    常见的事务管理器

              

    DataSourceTransactionManager

               Jdbc开发时事务管理器,采用JbcTemplat

    HibernateTransactionManager

               Hibernate开发时事务管理器,整合hibernate

     

    TransactionStatus getTransaction(TransactionDefinition definition)   事务管理器通过”事务详情”,获取”事务状态”,从而管理事务

    void commit(TransactionStatus status)   根据状态提交事物

    void rollback(TransactionStatus status)   根据状态回滚事物

    6.2TransactionStatus  

     

    6.3 TransactionDefinition

     

    传播行为:在两个业务之间如何共享事务

        PROPAGATION_REQUIRED , required , 必须  【默认值】

               支持当前事务,A如果有事务,B将使用该事务。

               如果A没有事务,B将创建一个新的事务。

    PROPAGATION_SUPPORTS ,supports ,支持

               支持当前事务,A如果有事务,B将使用该事务。

               如果A没有事务,B将以非事务执行。

    PROPAGATION_MANDATORY,mandatory ,强制

               支持当前事务,A如果有事务,B将使用该事务。

               如果A没有事务,B将抛异常。

    PROPAGATION_REQUIRES_NEW , requires_new ,必须新的

               如果A有事务,将A的事务挂起,B创建一个新的事务

               如果A没有事务,B创建一个新的事务

    PROPAGATION_NOT_SUPPORTED ,not_supported ,不支持

               如果A有事务,将A的事务挂起,B将以非事务执行

               如果A没有事务,B将以非事务执行

    PROPAGATION_NEVER ,never,从不

               如果A有事务,B将抛异常

               如果A没有事务,B将以非事务执行

    PROPAGATION_NESTED ,nested ,嵌套

               A和B底层采用保存点机制,形成嵌套事务。

    掌握:PROPAGATION_REQUIRED、

               PROPAGATION_REQUIRES_NEW、

               PROPAGATION_NESTED

    7.案例:转账

    7.1搭建环境

    7.2创建数据表        

    create table account(

          id int primary key,

          username varchar2(64),

          money   int 

    )

    7.3 导入jar包

             核心:4+1

             AOP:4(aop联盟,spring-aop ,aspectj规范,spring-aspcets)

             数据库驱动:ojdbc14.jar

             数据库:2(spring-jdbc/tx)

             连接池     c3p0

            

    7.4 Dao 层

    7.5service层

    7.6spring配置

    7.7测试

    8..手动管理事务(了解)

    Spring 底层使用 TransactionTemplate事务模板进行操作的

    Service需要事务  就把模板放再service层

    模板需要注入事务管理器

    配置事务管理器,注入连接池

     9.工厂bean生成代理:半自动

    Spring提供了管理事务的代理工厂bean TransactionProxyFactroyBean

    getBean()获取代理对象

    spring 配置代理

  • 相关阅读:
    lr中读写文件操作代码(原创)
    loadrunner中常用函数
    25岁综合焦虑症
    如果我是你的女朋友。。。看到了自己!哈哈
    web_reg_save_param 和关联的使用(原创)
    awk 的使用转自oracle.com
    去掉thinktime查看响应时间的方法
    vi 的使用方法
    ejs include助手没有处理BOM头的解决
    Nodejs, MemCacheD 在实际项目中的使用
  • 原文地址:https://www.cnblogs.com/jjqq0921/p/10194828.html
Copyright © 2020-2023  润新知