当前位置: 首页 > news >正文

Spring Boot 声明式事务

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.lryc.cn/news/506203.html

相关文章:

  • websocket 局域网 webrtc 一对一 多对多 视频通话 的示例
  • uniapp-微信小程序调用摄像头
  • 鸿蒙学习笔记:用户登录界面
  • 无人机航测系统技术特点!
  • 《算法ZUC》题目
  • 配置flutter 解决andriod studio报错 no device selected
  • docker搭建Redis集群及哨兵(windows10环境,OSS Cluster)
  • 信息化基础知识——数字政府(山东省大数据职称考试)
  • 信息安全实训室网络攻防靶场实战核心平台解决方案
  • Nginx主要知识点总结
  • PySide6程序框架设计
  • 「九」HarmonyOS 5 端云一体化实战项目——「M.U.」应用云侧开发云数据库
  • 记录:virt-manager配置Ubuntu arm虚拟机
  • clickhouse-介绍、安装、数据类型、sql
  • 【shell】常用100个shell命令使用讲解
  • Git-分支(branch)常用命令
  • 谈谈es6 Map 函数
  • 微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列
  • 【Unity3D】无限循环列表(扩展版)
  • MacOS 命令行详解使用教程
  • redis集群安装部署 redis三主三从集群
  • 第十二课 Unity 内存优化_内存工具篇(Memory)详解
  • 达梦8-达梦数据的示例用户和表
  • 数据可视化-1. 折线图
  • 【现代服务端架构】传统服务器 对比 Serverless
  • 论文学习—VAE
  • AI 智能体(AI Agent)到底什么原理?能干什么事情
  • 【mysql】如何查看大表记录行数
  • Linux之网络配置
  • SpringBoot集成JWT和Redis实现鉴权登录功能