@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 框架中用于声明式事务管理的强大工具,它简化了事务管理的复杂性,并允许开发者通过简单的注解来控制事务行为。

相关文章
|
6月前
|
Java Spring
Spring5源码(43)-@Transactional声明式事物(一)事物管理步骤简析
Spring5源码(43)-@Transactional声明式事物(一)事物管理步骤简析
49 0
|
6月前
|
Java 关系型数据库 数据库连接
Spring源码解析--深入Spring事务原理
本文将带领大家领略Spring事务的风采,Spring事务是我们在日常开发中经常会遇到的,也是各种大小面试中的高频题,希望通过本文,能让大家对Spring事务有个深入的了解,无论开发还是面试,都不会让Spring事务成为拦路虎。
88 1
|
Java 数据库连接 API
十二.Spring源码剖析-Transactional 事务执行流程
上一篇《[Transactional源码解析](https://blog.csdn.net/u014494148/article/details/118398677)》我们介绍了Spring对Transactional的解析,也就是事务的初始化工作,这一篇我们接着来分析事务的执行流程。
|
6月前
|
Java Spring
Spring5源码(47)-@Transactional声明式事物(五)嵌套事物简介
Spring5源码(47)-@Transactional声明式事物(五)嵌套事物简介
63 0
|
6月前
|
Java 数据库 Spring
Spring5源码(40)-基于tx标签和基于@Transactional注解的声明式事物介绍
Spring5源码(40)-基于tx标签和基于@Transactional注解的声明式事物介绍
56 0
|
Java 数据库 Spring
深入理解 Java 中的 @Transactional 注解:事务管理的精髓解析
在现代软件开发中,数据库事务管理是确保数据一致性和完整性的关键部分。Java 中的 `@Transactional` 注解是实现事务管理的重要工具之一。通过该注解,我们可以轻松地声明方法或类的事务行为,实现数据库操作的原子性和隔离性。本文将带您深入探索 Java 中的 `@Transactional` 注解,揭示其作用、用法以及在实际开发中的应用场景。
|
Java 数据处理 Spring
异步操作轻松实现:探究 Java 中的 @Async 注解
在现代软件开发中,性能和并发性是至关重要的因素。而 Java 中的 `@Async` 注解则为开发人员提供了一种轻松的方式来实现异步操作,从而提升应用程序的性能和响应性。本文将带您深入探索 Java 中的 `@Async` 注解,揭示其作用、用法以及在实际开发中的应用场景。
|
Java Spring
优化测试执行顺序:解析 Java 中的 @Order 注解
在软件开发中,测试的执行顺序有时候是至关重要的,尤其是在涉及依赖关系或状态共享的情况下。Java 中的 `@Order` 注解为开发人员提供了一种简便的方式来控制测试方法的执行顺序,确保测试按照指定的顺序运行。本文将带您深入探索 Java 中的 `@Order` 注解,揭示其作用、用法以及在实际开发中的应用场景。
|
数据库
Transactional注解不生效案例
Transactional注解不生效案例
144 0
Transactional注解不生效案例
|
JavaScript Dubbo 小程序
源码角度,分析@Transactional实现原理
源码角度,分析@Transactional实现原理
源码角度,分析@Transactional实现原理
下一篇
无影云桌面