• Spring事务


    1.@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能。@Transactional 的最有用的可选属性为:propagation(事务传播属性)和isolation(事务隔离级别)

    2.默认情况下,一个有事务方法, 遇到RuntiomeException 时会回滚 . 遇到 受检查的异常 是不会回滚 的. 要想所有异常都回滚,要加上 @Transactional( rollbackFor={Exception.class,其它异常}) .

    3.spring 在生成相关的bean的时候,查看拥有相关注解的类和方法,并且为这些类和方法生成代理,在需要注入相关的带有@Transactional标记的bean时候直接用代理去注入,这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务)。

    4.事务的实现主要是基于log实现(mysql binary log,oracle redo log )

    5.spring事务隔离级别

     keyDescription
    ISOLATION_DEFAULT 这是一个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与 JDBC 的隔离级别相对应。
    ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
    ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。
    ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
    ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。

    5.主要是基于注解的配置

    screenshot

    数据库隔离级别

    隔离级别隔离级别的值导致的问题
    Read-Uncommitted 0 导致脏读
    Read-Committed 1 避免脏读,允许不可重复读,允许幻读
    Repeatable-Read 2 避免脏读,不可重复读,允许幻读
    Serializable 3 串行化读,事务只能一个一个执行,避免了脏读、不可重复读、幻读。
    执行效率慢(我遇到过一种情况,用时是隔离级别1的30倍),使用时慎重

     术语解释

     nameDescription
    读脏 一事务对数据进行了增删改,但未提交,有可能回滚,
    另一事务却读取了未提交的数据,允许脏读取,但不允许更新丢失。
    如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,
    但允许其他事务读此行数据
    不可重复读 一事务对数据进行了更新删除操作,另一事务两次查询的数据不一致
    幻读 一事务对数据进行了新增操作,另一事务两次查询的数据不一致

    离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
    大多数的数据库默认隔离级别为 Read Commited,比如 SqlServer、Oracle
    少数数据库默认隔离级别为:Repeatable Read 比如: MySQL InnoDB

     
  • 相关阅读:
    LightOJ 1370 Bi-shoe and Phi-shoe
    CF410div2 B. Mike and strings
    CF410div2 A. Mike and palindrome
    CF410div2 D. Mike and distribution
    CF798 C. Mike and gcd problem
    LightOJ1282 Leading and Trailing
    入门-2
    入门-1
    铅笔,用用,舍不得放下
    《快乐读书 轻松理财》书摘
  • 原文地址:https://www.cnblogs.com/hsuchan/p/5672931.html
Copyright © 2020-2023  润新知