zoukankan      html  css  js  c++  java
  • Spring的事务




    事务:事务指的是逻辑上的一组操作,这组操作要么都成功,要么都失败。
    Transaction事务的四大特性ACID
    1.Atomicity原子性 事务的操作要么都成功,要么都不做,只要有一个失败,就会回滚。
      如A转账100给B:A转出100,B转入100,这两步要么一起完成,要么都不做。
    2.Consistency一致性 事务的运行前后数据的完整性必须保持一致。
      如A有200,B有200,一共400,A转给B100后,总金额还是400。
    3.Isolation隔离性 并发的事务之间不会相互影响,多个并发事务之间的数据要相互隔离(设置隔离级别)。
      如A转100给B:若事务未完成,B的账户是不会多100的。
    4.Durability持久性 事务一旦提交,它所做的修改将永久的保存在数据库中,不会受其他方面的影响。
    Spring中的事务管理介绍(高层抽象包括3个接口):
    1.PlatformTransactionManager 事务管理器 2.TransactionDefinition 事务定义信息(隔离、传播、超时、只读) 3.TransactionStatus 事务具体运行状态
    如果不考虑隔离性,会引发安全问题:
    1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。 2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。 3.幻读:一个事务读取了几行记录后,另一个事务插入了几行数据,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。




    隔离级别
    DEFAULT : 使用后端数据库默认的隔离级别(Spring中的选择项) READ_UNCOMMITED : 允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读。 READ_COMMITTED : 允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生。(Oracle默认隔离级别) REPEATABLE_READ : 对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。(MySQL默认隔离级别) SERIALIZABLE : 完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。在所有隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。 事务的传播行为解决业务层之间的相互调用。同时调用业务层中不同类的方法
    PROPAGATION_REQUIRED : 支持当前事务,如果不存在,就新建一个。 PROPAGATION_SUPPORTS : 支持当前事务,如果不存在,就不使用事务。 PROPAGATION_MANDATORY : 支持当前事务,如果不存在,抛出异常。 PROPAGATION_REQUIRES_NEW : 如果有事务存在,挂起当前事务,创建一个新的事务。 PROPAGATION_NOT_SUPPORTED : 以非事务方式运行,如果有事务存在,挂起当前事务。 PROPAGATION_NEVER : 以非事务方式运行,如果有事务存在,抛出异常。 PROPAGATION_NESTED : 如果当前事务存在,则嵌套事务执行。
  • 相关阅读:
    AJAX
    前端上传文件 后端PHP获取文件
    PHP基础语法
    JS错误记录
    JS学习笔记
    python利用xlrd读取excel文件始终报错原因
    安装xlwt和xlrd
    编程菜鸟的日记-Linux无处不在
    编程菜鸟的日记-《软件测试》Ron Patton著-读书笔记
    编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习9
  • 原文地址:https://www.cnblogs.com/shiysin/p/10688207.html
Copyright © 2011-2022 走看看