Spring Boot 2.x 编写 RESTful API (六) 事务

时间:2023-03-08 15:55:35

用Spring Boot编写RESTful API 学习笔记

Transactional

Spring Boot 2.x 编写 RESTful API (六) 事务

判定顺序

Spring Boot 2.x 编写 RESTful API (六) 事务

propagation

Spring Boot 2.x 编写 RESTful API (六) 事务

isolation

Spring Boot 2.x 编写 RESTful API (六) 事务

脏读

Spring Boot 2.x 编写 RESTful API (六) 事务

不可重复读

Spring Boot 2.x 编写 RESTful API (六) 事务

幻读

Spring Boot 2.x 编写 RESTful API (六) 事务

不可重复读是指记录不同 (update),幻读是数据条数不同 (insert, delete)

几种隔离的比较

Spring Boot 2.x 编写 RESTful API (六) 事务

isolation vs. lock

  • 两个不同的东西,隔离不是靠锁实现的,是靠对数据的监控实现的
  • 锁:表加好锁了,除非出现死锁等特殊状况,事务是不会被数据库主动回滚的
  • 隔离:如果发现数据不符合相应的事务隔离级别,当前事务会出错并回滚;相比锁被回滚可能较大,需要程序有出错重试的步骤

timeout

  • timeout 事务的超时时间,默认值为 -1。如果超过该时间限制但事务还没有完成,则自动回滚事务
  • 方法抛出异常,事务被回滚,可能是 SQL 执行时间过长的异常,也可能是 TransactionTimedOutException
  • 从方法执行开始计算,每个 SQL 执行前检查一次是否超时,方法全部执行完毕后不检查是否超时

源码:spring-boot-2-restful