Spring 事务隔离级别与传播特性

1. 原理

  A. Spring事务的本质就是数据库对事务的支持,没有数据库事务的支持,Spring是无法提供事务功能的;

  B. 纯JDBC操作步骤

    获取连接:Connection conn = DriverManager.getConnection();

    开启事务:conn.setAutoCommit(true/false);

    执行CRUD

    提交或回滚事务:conn.commit() / conn.rollback();

    关闭连接:conn.close();

  C. Spring自动完成开启事务或提交、回滚事务这两步,只需要在配置类加上开启@EnableTransactionManagement注解驱动,然后在相关类和方法上加上@Transactional注解;

  D. 真正的数据库层的事务提交和回滚是通过binlog和redolog实现的。

 

2.  Spring中的隔离级别

  A. default:这 PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别;

  B. read uncommitted:这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据,这种隔离级别会产生脏读,不可重复读和幻读;

  C. read committed:保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据,这种隔离级别会产生不可重复读和幻读;

  D. repeatable read:这种事务隔离级别可以防止脏读,不可重复读,但是可能出现幻读;

  E. serializable:这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。

 

3. 事务的传播特性

  A. required:支持当前事务,如果当前没有事务,就新建一个事务,这是Spring默认的事务的传播;

  B. supports:支持当前事务,如果当前没有事务,就以非事务方式执行;

  C. mandatory:支持当前事务,如果当前没有事务,就抛出异常;

  D. requireds new:新建事务,如果当前存在事务,把当前事务挂起。新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败回滚之后,不能回滚内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以不处理回滚操作;

  E. not supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起;

  F. never:以非事务方式执行,如果当前存在事务,则抛出异常;

  G. nested:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。

 

posted @   如幻行云  阅读(860)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示