事物的基本概念
事物的四个特性
原子性:要么都发生要么都不发生。
一致性:状态一直。ab转账。a转出100b也必须也+100
隔离性:事物和事物之间应该互相隔离 互不影响
持久性:事物发生的改变 要存储于数据库
数据库的事物级别
mysql默认的是 可重复读
数据库常见的几种现象
- 1、脏读 b提交了内容。 a读到了b提交的内容。 b回滚了。a就是脏读
- 2、不可重复读 a每次读的内容都不一致
- 3、幻读 a批量修改。这时候b插入一条 a好像没有修改掉。
mysql隔离级别
读未提交
读已经提交 避免脏读
可重复读 避免不可重复读(默认)
串行
spring事物碰撞机制
spring的配置
advice中可以配置spring事物的隔离级别 织入哪些方法 读写等等 利用aop对数据库实现回滚
spring事物方法传播 @trasaction 可以修饰类 接口 方法 优先方法 接着是类
propagation
主要 propogation_required 方法。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。
NOT_SUPPORTED 就是不使用事物
REQUIRESNEW 什么情况都使用新事物
事物实现的。 源码大致意思是先找那些有@trasaction注解的方法、类 然后把这些个方法生成代理类,当这些个方法执行后,实际执行这些代理类,代理再调动我们的方法。当方法出现问题。就捕获那些异常。进行回滚处理。 好处就是分离了事物代码和核心业务代码。我们不用关心事物管理。更加专心关注核心业务代码。