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类似的操作。

相关推荐
Purple Coder21 小时前
面试题目总结
面试·职场和发展
小江的记录本21 小时前
【Java基础】Java 8-21新特性 :JDK17:密封类、模式匹配、Record类(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·python·mysql·面试·职场和发展
小江的记录本21 小时前
【Java基础】集合框架: ArrayList vs LinkedList 核心区别、扩容机制(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
夕除21 小时前
spring boot 10
java·python·spring
清水白石00821 小时前
从“点一下导出”到生产级任务队列:Python 异步导出系统设计全景解析
java·数据库·python
Mahir0821 小时前
Spring 核心原理:IoC/DI 与 Bean 生命周期全景解析
java·后端·spring·面试·bean生命周期·控制反转ioc·依赖注入di
快乐的哈士奇21 小时前
历史对话关联 RAG 上下文检索 — 内部技术介绍
服务器·数据库·oracle
半夜修仙21 小时前
Redis中List数据类型的常见命令
数据库·redis·缓存
wujt888821 小时前
mysql 比较数据库
数据库·mysql·oracle
tongluowan00721 小时前
怎么保证缓存和数据库的一致性
java·数据库·缓存·一致性