Spring Boot 声明式事务

embedded/2024/12/25 1:19:54/

Spring Boot中的声明式事务管理主要通过@Transactional注解来实现。以下是@Transactional注解的一些关键用法和特性:
1. 启用事务管理
在Spring Boot应用中使用@Transactional注解之前,需要在启动类或者配置类上添加@EnableTransactionManagement注解来启用事务管理支持。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@EnableTransactionManagement
public class TransactionManagementApplication {
    public static void main(String[] args) {
        SpringApplication.run(TransactionManagementApplication.class, args);
    }
}

2. 使用@Transactional注解
@Transactional注解可以应用于类或者方法上。如果应用于类上,则该类中的所有方法都会默认拥有声明的事务属性。
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class EmployeeService {
    @Transactional
    public Employee addEmployee(Employee employee) {
        // 数据库操作
        return employee;
    }
}

3. 事务属性
@Transactional注解有多个属性来定制事务行为,包括:
•  propagation:事务的传播行为,默认值为Propagation.REQUIRED,表示如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
•  isolation:事务的隔离级别,默认值为Isolation.DEFAULT,表示使用底层数据库的默认隔离级别。
•  timeout:事务的超时时间,默认值为-1,表示不超时。
•  readOnly:指定事务是否为只读事务,默认值为false。
•  rollbackFor:指定哪些异常会导致事务回滚。
•  noRollbackFor:指定哪些异常不会导致事务回滚。
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30)
public void createEntity(MyEntity myEntity) {
    myRepository.save(myEntity);
}

4. 事务管理器
Spring Boot会根据添加的依赖自动配置相应的事务管理器。如果添加的是spring-boot-starter-jdbc依赖,框架会默认注入DataSourceTransactionManager实例。如果添加的是spring-boot-starter-data-jpa依赖,框架会默认注入JpaTransactionManager实例。
5. 事务的工作原理
Spring的声明式事务管理是通过Spring AOP实现的,它允许你在配置中声明事务边界,而不是在代码中。这种方式减少了样板代码的数量,让业务逻辑更加清晰,并且在大多数情况下,是更推荐使用的事务管理策略。
6. 事务事件
从Spring 4.2开始,事件的监听器可以绑定到事务的某个阶段。例如,可以在事务成功提交后处理事件。
通过使用@Transactional注解,Spring Boot提供了一种简单而强大的声明式事务管理机制,使得事务管理与业务逻辑解耦,提高了代码的可维护性和可读性。


http://www.ppmy.cn/embedded/148483.html

相关文章

同态加密算法详解及Python实现

目录 同态加密算法详解及Python实现第一部分:同态加密概述与原理1.1 什么是同态加密?同态加密的定义:1.2 同态加密的分类1.3 同态加密的优势与挑战优势挑战第二部分:常见同态加密算法及其应用场景2.1 RSA同态加密支持操作应用场景2.2 Paillier加密支持操作应用场景2.3 Gent…

虚幻引擎游戏开发系列专题-官方编码标准或规约

遵守既定标准和最佳实践来编写可维护的代码。在虚幻游戏引擎中,存在着一些既定的编码标准和约定 ,养成良好的编码规范是写好一份优雅代码的第一步,并且在虚幻官方也强调了,某些编码标准的遵循是强制性的。 编码规约对程序员来说意味着什么 在软件开发中,软件生命周期的80%的成…

第四章补充:线性代数(B站:一高数)

视频1:行列式的入门 原视频:线性代数!启动!从零开始到精通|第一集_哔哩哔哩_bilibili 一、二阶与三阶行列式 小学我们就接触过鸡兔同笼,这个问题让我们第一次接触到了方程组的思想。我们可以将它抽象成一个二元一次…

解决 Curl 自签名证书验证失败的实用指南

经过这些步骤仍然不能使用自签https, 报错的问题 curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure c…

ubuntu20.04安装imwheel实现鼠标滚轮调速

ubuntu20.04安装imwheel实现鼠标滚轮调速 Ubuntu 系统自带的设置中仅具备调节鼠标速度的功能,而无调节鼠标滚轮速度的功能。其默认的鼠标滚轮速度较为缓慢,在查看文档时影响尚可接受,但在快速浏览网页时,滚轮速度过慢会给用户带来…

kubevirt网络

六、KubeVirt网络 KubeVirt网络相关组件 用户在KubeVirt平台创建虚拟机只需创建一个vmi(Virtual Machine Instance)对象,之后virt-controller会根据vmi对象中的信息创建一个Pod,这里把这个Pod叫做vmi pod。Vmi pod中有kubevirt组…

LeetCode 54. 螺旋矩阵 (C++实现)

1. 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入&#xff1…

Jest 入门指南:从零开始编写 JavaScript 单元测试

前言 在前端开发中,单元测试已经成为确保代码质量和稳定性的关键步骤。Jest 作为由 Facebook 开发和维护的功能强大的 JavaScript 测试框架,以其易于配置、丰富的功能和开箱即用的特性,成为众多开发者的首选工具。本文旨在引导你从零开始&am…