洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
670
2022-11-01
Spring 的事务传播特性和隔离级别
spring事务的传播级别
PROPAGATION_REQUIRED:Spring的默认传播级别,如果上下文中存在事务则加入当前事务,如果不存在事务则新建事务执行。PROPAGATION_SUPPORTS:如果上下文中存在事务则加入当前事务,如果没有事务则以非事务方式执行。PROPAGATION_MANDATORY:该传播级别要求上下文中必须存在事务,否则抛出异常。PROPAGATION_REQUIRES_NEW:该传播级别每次执行都会创建新事务,并同时将上下文中的事务挂起,执行完当前线程后再恢复上下文中事务。(子事务的执行结果不影响父事务的执行和回滚)PROPAGATION_NOT_SUPPORTED:当上下文中有事务则挂起当前事务,执行完当前逻辑后再恢复上下文事务。(降低事务大小,将非核心的执行逻辑包裹执行。)PROPAGATION_NEVER:该传播级别要求上下文中不能存在事务,否则抛出异常。PROPAGATION_NESTED:嵌套事务,如果上下文中存在事务则嵌套执行,如果不存在则新建事务。(save point概念)
事务隔离级别
脏读:读取到了别的事务回滚前的数据,例如B事务修改数据库X,在未提交前A事务读取了X的值,而B事务发生了回滚。不可重复读:一个事务在两次读取同一个数据的值不一致。例如A事务读取X,在中间过程中B事务修改了X的值,事务A再次读取X时值发生了改变。幻读:查询得到的数据条数发生了改变,例如A事务搜索数据时有10条数据,在这时B事务插入了一条数据,A事务再搜索时发现数据有11条了。数据隔离级别read-uncommitted:未提交读(脏读、不可重复读、幻读)read-committed:已提交读(不可重复读、幻读),大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。repeatable-read:可重复读(幻读),保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。serializable:串行化最严格的级别,事务串行执行,资源消耗最大
Spring事务传播和隔离级别配置
@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class,timeout=1,isolation=Isolation.DEFAULT)
事务的传播性:@Transactional(propagation=Propagation.REQUIRED) 如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)事务的超时性:@Transactional(timeout=30) //默认是30秒事务的隔离级别:@Transactional(isolation = Isolation.READ_UNCOMMITTED)br/>**回滚指定异常类**:@Transactional(rollbackFor={RuntimeException.class,Exception.class})只读:@Transactional(readOnly=true)该属性用于设置当前事务是否为只读事务,设置为true表示只读
相关文章:事务的四大特性 事务的隔离级别详解
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~