跳到主要内容

Spring 事务中的几种隔离级别介绍

难

难得一见

java

2024年12月27日 1,467 次阅读
本页目录

  Spring 为了方便用户设定事务的隔离级别,专门定义了一个枚举类:Isolation。这个枚举类和事务传播行为的枚举类很像。
 

public enum Isolation {

    DEFAULT(TransactionDefinition.ISOLATION_DEFAULT),
    READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED),
    READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED),
    REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ),
    SERIALIZABLE(TransactionDefinition.ISOLATION_SERIALIZABLE);

    private final int value;

    Isolation(int value) {
        this.value = value;
    }

    public int value() {
        return this.value;
    }

}

  TransactionDefinition.ISOLATION_DEFAULT 指的是使用后端数据库默认的隔离级别。比如,MySQL 默认是 REPEATABLE_READ,而 Oracle 默认是 READ_COMMITTED。

  TransactionDefinition.ISOLATION_READ_UNCOMMITTED 是最低的隔离级别,实际应用中很少使用。因为它允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读的问题。

  TransactionDefinition.ISOLATION_READ_COMMITTED 允许读取并发事务已经提交的数据。这种隔离级别可以防止脏读,但仍有可能发生幻读或不可重复读。

  TransactionDefinition.ISOLATION_REPEATABLE_READ 保证对同一字段的多次读取结果都是一致的,除非数据是被当前事务自己修改的。它可以防止脏读和不可重复读,但仍有可能发生幻读。

  TransactionDefinition.ISOLATION_SERIALIZABLE 是最高的隔离级别,完全遵循 ACID 原则。所有事务都将依次逐个执行,这样事务之间就完全不可能产生干扰。也就是说,这个级别可以防止脏读、不可重复读以及幻读。不过,使用这个隔离级别会对程序性能产生较大影响,通常情况下不太会用到。

Related

相关文章

同分类文章 →
2021年07月07日 java

&&的优先级

&&的优先级高于|| 这里就有一种特殊情况:如果表达式中含有||,总是先算 || 左边的子表达式,这里是((a+1)>0)永远先于(((++a)<0) && (!((b--)<=0)))计算(并且由于优先级,先计算a+1,再与0比较,而不是先将1与0比较,再和a相加),如果 || 左边的

2021年03月29日 java

求圆心到点的直线与圆的相交点.

若O(x1,y1),A(x2,y2)满足OA>r。 则向量OA=(x2-x1,y2-y1),可设向量OB=(m,n),则有:m(y2-y1)-n(x2-x1)=0且(m-x1)²+(n-y1)²=r²。 解得B((x2-x1)r/√(x2-x1)²+(y2-y1)²,(y2-y1)r/√(x2-x1)&s

2021年03月27日 java

强制类型转换-其实就是向下转型

用(String)做强制类型转换和用String.valueOf()区别在于:String 就是直接强制转化成String型的字符串,且有优先级限制,像int i=123;不能String s=(String)i。而String.valueOf()里面的参数转换可以是double、long、char

WeChat

扫码加我微信

微信二维码