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

    简介

    springMVC中对事务的支持是通过在service层的类上标注 @Transactional实现的。

    在标注时有两个参数isolation和propagation。下面对这两个参数做具体介绍。

    isolation 事务隔离级别

    springmvc在 org.springframework.transaction.annotation.Isolation 定义了事务的隔离级别。

    • DEFAULT
      使用底层数据库默认的事务隔离级别。
    • READ_UNCOMMITTED
      这个事务隔离级别会导致脏读,不可重复读和幻读。因为它允许一个事务读取另一个事务中未提交的数据(有变化)。如果未提交的数据出现任何回滚,第二个事务将会获取一个无效的数据。
      不可重复读:同一事务两次读取数据可能因为另一个事务对该数据的修改而不一致。
      幻读:一个事务修改了表中的所有数据,同时另一个事务又向表中插入一行数据,在某个时刻,第一事务发现表中还有没有修改的数据行。
    • READ_COMMITTED
      这个事务隔离级别可以阻止脏读,但是还存在不可重复读,幻读现象。该事务级别不允许一个事务读取另一个事务中未提交的数据。
    • REPEATABLE_READ
      这个事务级别不会导致脏读和重复读,幻读仍然存在,他不但阻止一个事务读取另一个事务中没有提交的数据,他还阻止一个事务在读取一个数据行时,另一个事务对该行进行修改。
    • SERIALIZABLE
      这个事务级别可以阻止脏读,不可重复读,和幻读。包含Repeatable_read的所有的禁止情况,而且他还阻止如果一个事务在处理满足一定where条件的行记录时,不允许另一个事务插入一个满足where条件的记录。

    propagation 事务传播行为

    org.springframework.transaction.annotation.Propagation中定义了事务的传播行为。

    • REQUIRED
      支持当前事务,如果当前没有事务就创建一个。
    • SUPPORTS
      支持当前事务,如果当前没有事务就以非事务方式执行。
    • MANDATORY
      支持当前事务,如果当前没有事务则抛出异常。
    • REQUIRES_NEW
      新建事务,如果当前存在事务,将当前事务挂起。
    • NOT_SUPPORTED
      不支持事务,如果当前存在事务,则将当前事务挂起。
    • NEVER
      以非事务方式运行,如果当前存在事务,则抛出异常。
    • NESTED;
      如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与REQUIRED类似的操作。
    I am chris, and what about you?
  • 相关阅读:
    Symantec Backup Exec Remote Agent 2010在Redhat Enterprise 6.6上启动问题
    RMAN冷备份异机还原
    ORACLE OLAP错误ORA-06512: at "SYS.OLAPIHISTORYRETENTION"
    expdp 报The value (30) of MAXTRANS parameter ignored错误的原因诊断
    ORA-01157 & ORA-01110
    INITIAL参数设置导致TRUNCATE TABLE不能降低高水位线案例
    ORA-19563: header validation failed for file
    ORACLE NUMBER类型Scale为0引发的问题
    ORA-04063: view "SYS.DBA_REGISTRY" has errors
    Linux 格式化扩展分区(Extended)
  • 原文地址:https://www.cnblogs.com/arax/p/8463400.html
Copyright © 2011-2022 走看看