springboot事务的隔离级别

一:事务

概念:事务是逻辑上的一组操作,要么全部执行,要么全部不执行。

事务的四大特性:

原子性:事务是最小的执行单位,不允许分割。事物的原子性确保动作要么全部执行,要么完全不起作用。

一致性:

隔离性:

持久性:

二.事务的隔离级别由低到高分为四个级别:读未提交->读提交->重复读->序列化

1.读未提交(Read uncommitted):一个事务可以读取另一个未提交的事务。事务A读取未提交的事务B时,A看到的数据不是事   务B执行完成的最后数据,当事务B发现数据不对时立即回滚事务,这时事务A出现脏读。

2.读提交(Read committed):就是一个事务要等另一个事务提交后才能读取数据。若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据。当事务A进行第一次查询操作完成后,事务B进行UPDATE操作,这时事务A进行第二次查询操作,第二次查询的是事务B提交后的数据,所以事务A前后两次的查询结果出现差异,这就是不可重复读。读提交能解决脏读,却会出现不可重复读。

3.重复读(Repeatable read):就是在开始读取数据(事务开启)时,不再允许修改操作。重复读可以解决不可重复读的问题,但会带来幻读。事务A读取数据时,事务B进行插入操作并提交事务,这时事务A提交,发现事务A提交前后数据出现差异,就出现幻读。

4.序列化(Serializable):Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

三:springboot开启事务

在Spring Boot中,当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框 架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外 配置就可以用@Transactional注解进行事务的使用。springboot在入口类添加@EnableTransactionManagement注解开启事务功能,在方法(该方法必须为public方法)上添加@Transactional注解,该方法开启事务功能。

1.springboot使用隔离级别

 org.springframework.transaction.annotation.Isolation 枚举类中定义了五个表示隔离级别的值,DEFAULT 为默认使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_COMMITTED 。

public enum Isolation {  
    DEFAULT(-1),
    READ_UNCOMMITTED(1),
    READ_COMMITTED(2),
    REPEATABLE_READ(4),
    SERIALIZABLE(8);
}

指定方法通过使用 isolation 属性设置,例如:

@Transactional(isolation=Isolation.DEFAULT)

你可能感兴趣的:(springboot学习)