@Transactional 用法和原理

简介: @Transactional 用法和原理

@Transactional 是 Spring 框架中的一个注解,它用于声明一个方法或类需要进行事务管理。当你在方法或类上使用此注解时,Spring 会确保该方法或类中的所有数据库操作都在一个事务中执行。如果事务中的某个操作失败,则整个事务将被回滚,以确保数据的一致性。

用法
在方法上使用:

@Service
public class MyService {

@Transactional
public void someTransactionalMethod() {
    // ... 数据库操作 ...
}

}
在类上使用:当在类上使用 @Transactional 注解时,该类中的所有公共方法都将运行在事务中。

@Service
@Transactional
public class MyService {

public void method1() {
    // ... 数据库操作 ...
}

public void method2() {
    // ... 数据库操作 ...
}

}
指定传播行为、隔离级别等:你可以通过注解的参数来指定事务的传播行为、隔离级别、只读属性等。

@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.SERIALIZABLE, readOnly = false)
public void someSpecialMethod() {
// ...
}
原理
AOP(面向切面编程):Spring 通过 AOP 代理来管理事务。当你对一个类或方法添加 @Transactional 注解时,Spring 会为该类或方法创建一个代理。这个代理会在方法调用前后添加额外的逻辑来管理事务。
事务管理器:Spring 使用 PlatformTransactionManager 接口的实现类(如 DataSourceTransactionManager、JpaTransactionManager 等)来管理事务。这些管理器负责与底层数据库进行交互,以确保事务的正确开始、提交或回滚。
事务属性:通过 @Transactional 注解,你可以指定多种事务属性,如传播行为(Propagation)、隔离级别(Isolation)、只读(ReadOnly)和回滚规则(rollbackFor、noRollbackFor)等。这些属性决定了事务如何与现有的事务进行交互、事务的可见性以及其他事务特性。
事务传播行为:Spring 支持七种不同的事务传播行为,例如 REQUIRED、REQUIRES_NEW、NESTED 等。这些传播行为决定了当一个事务方法被另一个事务方法调用时应该如何处理事务。
事务隔离级别:为了防止多个事务并发执行时产生的问题(如脏读、不可重复读、幻读等),数据库提供了隔离级别来控制事务之间的可见性。Spring 支持所有的 SQL 标准隔离级别,如 READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ 和 SERIALIZABLE。
自动提交与回滚:如果事务方法成功完成,则事务会自动提交。如果在事务方法中抛出了未检查的异常(即运行时异常),则事务会自动回滚。你也可以通过 @Transactional 注解的 rollbackFor 和 noRollbackFor 属性来自定义回滚规则。
总之,@Transactional 注解是 Spring 框架中用于声明式事务管理的强大工具,它简化了事务管理的复杂性,并允许开发者通过简单的注解来控制事务行为。

相关文章
|
Java 应用服务中间件 Nacos
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)
818 0
|
5月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
48909 11
|
消息中间件 存储 监控
RocketMQ消息重试机制解析!
RocketMQ消息重试机制解析!
1409 1
RocketMQ消息重试机制解析!
|
JavaScript Java 关系型数据库
Spring事务失效的8种场景
本文总结了使用 @Transactional 注解时事务可能失效的几种情况,包括数据库引擎不支持事务、类未被 Spring 管理、方法非 public、自身调用、未配置事务管理器、设置为不支持事务、异常未抛出及异常类型不匹配等。针对这些情况,文章提供了相应的解决建议,帮助开发者排查和解决事务不生效的问题。
2490 1
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
4078 1
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
SQL 分布式计算 大数据
《深度剖析Spark SQL:与传统SQL的异同》
Spark SQL是Apache Spark生态系统中用于处理结构化数据的组件,作为大数据时代的SQL利器,它在继承传统SQL语法和逻辑思维的基础上,重新定义了数据处理的效率与灵活性。相比传统SQL,Spark SQL支持分布式计算、内存处理及多种数据源,可高效应对PB级数据挑战。其核心概念DataFrame提供优化查询能力,使数据分析更便捷。两者虽有联系,但在处理规模、计算模式和优化策略上差异显著,共同满足不同场景下的数据需求。
741 35
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
消息中间件 分布式计算 前端开发
盘点 35 个 Apache 顶级项目,我拜服了…
盘点 35 个 Apache 顶级项目,我拜服了…
4985 1
盘点 35 个 Apache 顶级项目,我拜服了…
|
监控 Java 数据库
Spring事务中的@Transactional注解剖析
通过上述分析,可以看到 `@Transactional`注解在Spring框架中扮演着关键角色,它简化了事务管理的复杂度,让开发者能够更加专注于业务逻辑本身。合理运用并理解其背后的机制,对于构建稳定、高效的Java企业应用至关重要。
669 0
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(33)--- 邮件参数配置和模板邮件发送处理
循序渐进VUE+Element 前端应用开发(33)--- 邮件参数配置和模板邮件发送处理

热门文章

最新文章

下一篇
开通oss服务