Spring中事务(面试常考)

点击查看什么是事务?

Spring 支持两种方式的事务管理

编程式事务管理

通过 TransactionTemplate或者TransactionManager手动管理事务,实际应用中很少使用,但是对于你理解 Spring 事务管理原理有帮助。
声明式事务管理

实际是通过 AOP 实现(基于@Transactional 的全注解方式使用最多)。

Spring 事务管理接口介绍

Spring 框架中,事务管理相关最重要的 3 个接口如下:

  • PlatformTransactionManager:(平台)事务管理器,Spring 事务策略的核心。
  • TransactionDefinition:事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)。
  • TransactionStatus:事务运行状态。

@Transactional使用

可以在Spring 的 Bean 上使用@Transactional 注解

  1. 方法 :推荐将注解使用于方法上,不过需要注意的是:该注解只能应用到 public 方法上,否则不生效。
  2. 类:如果这个注解使用在类上的话,表明该注解对该类中所有的 public 方法都生效。
  3. 接口:不推荐在接口上使用。

@Transactional 的常用配置参数

@Transactional 的常用配置参数总结:

属性名 说明
propagation 事务的传播行为,默认值为 REQUIRED
isolation 事务的隔离级别,默认值采用 DEFAULT
timeout 事务的超时时间,默认值为-1(不会超时)。如果超过该时间限制但事务还没有完成,则自动回滚事务。
readOnly 指定事务是否为只读事务,默认值为 false。
rollbackFor 用于指定能够触发事务回滚的异常类型,并且可以指定多个异常类型。

isolation的几种类型:

复制代码
    int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;//读未提交
    int ISOLATION_READ_COMMITTED = 2;//读已提交
    int ISOLATION_REPEATABLE_READ = 4;//可重复读
    int ISOLATION_SERIALIZABLE = 8;//串行化

点击查看几种隔离类型的解释

propagation的几种类型 :

PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中

PROPAGATION_SUPPORTS:使用当前事务,如果当前没有事务,就以非事务方式执行

PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常 mandatory

PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起

PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起

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

PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

相关推荐
xixingzhe217 分钟前
MySQL 锁表故障排查与处理
数据库·mysql
真上帝的左手36 分钟前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
为思念酝酿的痛42 分钟前
MySQL表的连接
数据库·mysql
数字新视界1 小时前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
Flynn Liang1 小时前
Spring AI 上生产:限流熔断、密钥与成本治理、私有化/混合部署、降级与 Prompt 灰度架构全解
人工智能·spring·架构·高可用·springai·成本治理·生产架构
考研保研资料分享2 小时前
2022环境工程保研北师大:三校专业追问、论文贡献与择校复盘
面试
bksczm2 小时前
MySQL之存储引擎
数据库·mysql
Flynn Liang2 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
大模型最新论文速读2 小时前
text-to-sql:从学术玩具到生产落地
数据库·sql
ManageEngineITSM3 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘