Spring中的事务是如何实现的

简介: Spring事务基于数据库事务与AOP实现,通过代理对象拦截加了@Transactional的方法,创建连接并禁用自动提交,方法执行后根据异常情况决定提交或回滚。事务隔离级别对应数据库级别,传播机制由Spring管理,基于数据库连接实现,复杂但灵活。
  1. Spring事务底层是基于数据库事务和AOP机制的
  2. ⾸先对于使⽤了@Transactional注解的Bean,Spring会创建⼀个代理对象作为Bean
  3. 当调⽤代理对象的⽅法时,会先判断该⽅法上是否加了@Transactional注解
  4. 如果加了,那么则利⽤事务管理器创建⼀个数据库连接
  5. 并且修改数据库连接的autocommit属性为false,禁⽌此连接的⾃动提交,这是实现Spring事务⾮ 常重要的⼀步
  6. 然后执⾏当前⽅法,⽅法中会执⾏sql
  7. 执⾏完当前⽅法后,如果没有出现异常就直接提交事务
  8. 如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务
  9. Spring事务的隔离级别对应的就是数据库的隔离级别
  10. Spring事务的传播机制是Spring事务⾃⼰实现的,也是Spring事务中最复杂的
  11. Spring事务的传播机制是基于数据库连接来做的,⼀个数据库连接⼀个事务,如果传播机制配置为 需要新开⼀个事务,那么实际上就是先建⽴⼀个数据库连接,在此新数据库连接上执⾏sql
相关文章
|
Java
阿里云镜像快速构建springboot
阿里云镜像快速构建springboot
1701 0
|
28天前
|
人工智能 负载均衡 Java
企业级 Spring 应用 MCP 化解决方案
AI MCP Bridge 是一站式 Spring 应用 MCP 化治理平台,零代码将 REST Controller 升级为 MCP 服务,支持编译时元信息生成、多注册中心、动态服务发现与负载均衡,兼容 Spring Web 原生生态,助力传统应用无缝接入 AI 工具调用。
|
5月前
|
XML Java 测试技术
使用 @Transactional 控制事务边界:传播和隔离解释
本文深入解析了 Spring 框架中的 `@Transactional` 注解,重点介绍了事务管理中的传播行为与隔离级别。内容涵盖事务的基本概念、声明式事务管理、回滚机制、传播模式(如 REQUIRED、REQUIRES_NEW 等)及隔离级别(如 READ_COMMITTED、SERIALIZABLE),并通过示例说明如何在实际开发中灵活应用这些特性,以确保数据一致性与系统性能的平衡。适合 Java 开发人员深入理解 Spring 事务机制。
307 1
使用 @Transactional 控制事务边界:传播和隔离解释
|
SQL 数据可视化 前端开发
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
2318 0
Springboot 整合 xxljob 使用定时任务调度(新手入门篇)
|
监控 关系型数据库 PostgreSQL
两阶段提交(2PC, Two-Phase Commit)
【8月更文挑战第24天】
957 9
|
9月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
1148 8
|
JavaScript 前端开发 Java
建立SpringBoot项目
在最新版本中,通过Eclipse建立Spring Boot项目,使用在Eclipse市场安装目前不太稳定,需要重新安装Spring Boot版本的Eclipse,现在介绍如何进行。
1391 0
建立SpringBoot项目
|
域名解析 负载均衡 网络协议
slb域名配置步骤
slb域名配置步骤
834 12
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
622 5
|
消息中间件 数据可视化
rabbitmq的启动命令
1.以应用方式启动 rabbitmq-server -detached 后台启动 Rabbitmq-server 直接启动,如果你关闭窗口或者需要在改窗口使用其他命令时应用就会停止 关闭:rabbitmqctl stop 2.以服务方式启动
4818 0
rabbitmq的启动命令