Spring 的事务传播特性和隔离级别

6,620 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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) 回滚指定异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class}) 只读:@Transactional(readOnly=true)该属性用于设置当前事务是否为只读事务,设置为true表示只读

相关文章:事务的四大特性 事务的隔离级别详解

本文内容到此结束了,

如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。

如有错误❌疑问💬欢迎各位大佬指出。

主页共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

a37032f76d3ebe77e3e3d265ff1e1d7.jpg