spring事务
2020-06-05 14:20:35 0 举报
Spring事务
作者其他创作
大纲/内容
基于tx以及aop的命名空间的xmls实现的
事务是否只读
PROPAGATION_NESTED
同一个事务中,调用远程接口,修改数据,但是调用远程接口有延迟,可能需要一段时间,在声明式事务下,这个事务处理需要几秒钟,并在占用数据库的连接,数据库的事务连接是有时限的,并且一个事务占用几秒中的数据库连接是属于资源的浪费,可以使用编程式事务,控制成事务块
数据库默认的隔离级别
数据库引擎不支持事务
通过注解@Translational实现
ISOLATION_REPEATABLE_READ
完全满足ACID。不会导致脏读、不可重复读、幻影读。但是比较慢,是通过完全锁定当前事务所涉及的数据表来完成的
ISOLATION_SERIALIZABLE
1.作用在类上,所有的public方法都具有该事务属性;2。作用在方法上
注解属性rollbackfor设置有误
声明式事务
避免脏读、不可重复读、幻读,事务完全隔离,但会影响性能,完全隔离对数据的侵占性强,会阻碍并发,要求事务相互等待,所以需要对事务隔离进行灵活运用
应用在非public方法上
事务属性
ISOLATION_READ_UNCOMMITTED
非事务运行,有事务,则挂起
PROPAGATION_NOT_SUPPORTED
PROPAGATION_REQUIRES_NEW
传播行为
已存在事务,将之挂起,创建新的事务
对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻影读仍可能发生。
error
有活动事务,则嵌套进去,双重事务,没有的话比对_REQUIRED
当前存在事务,则加入事务;没有事务,以非事务方式运行
应用场景
ISOLATION_DEFAULT
使用说明
注解失效场景
远程API接口调用的效率问题
Exception异常
PROPAGATION_SUPPORTS
oracle支持READ COMMITTED和SERIALIZABLE
注解属性rollbackfor默认抛出unchecked异常包括error和运行时异常
只在已存在的事务中运行,不会创建事务
非事务运行,遇见事务,则抛出异常
异常分类
事务超时机制
非运行时异常(可查的异常)
事务粒度更精细
一定回滚
有事务就加入进去 ,没有事务则创建事务
PROPAGATION_NEVER
ISOLATION_READ_COMMITTED
注解属性propagation设置有误
允许读取已提交。不会导致脏读,可能导致幻影读或不可重复读。
事务的回滚规则
运行时异常(不可查的异常)
基于aop面向切面,将业务处理与事务部分解耦,代码侵入性很低,本质上是对方法进行拦截,在方法执行之前获取事务,或者创建事务,在执行完成之后,根据执行情况提交和回滚
允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。
编程式事务
spring事务
1.在@Translational注解中没有配置rollbackfor属性则在遇到RuntimeException才会回滚,加上rollbackfor=Exception则可以让事务在遇到非运行异常时也可以回滚。
异常被catch吃了
事务的隔离级别
PROPAGATION_REQUIRED
PROPERGATION_MANDATORY
0 条评论
下一页