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

SpringBoot中,声明式事务的使用

一、简介

在 Spring Boot 中使用声明式事务非常简单,主要是通过 Spring 的 @Transactional 注解来实现。

二、使用

1、添加依赖:确保你的项目中已经包含了 Spring Data JPA 或 Spring JDBC 依赖,因为这些依赖包含了事务管理所需的功能。

<!-- 如果使用 Spring Data JPA -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency><!-- 如果使用 Spring JDBC -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

2、启用事务管理:通常在 Spring Boot 中,事务管理默认是启用的。如果需要手动启用,可以在主应用程序类上添加 @EnableTransactionManagement 注解。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;@SpringBootApplication
@EnableTransactionManagement
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

3、使用 @Transactional 注解:在需要事务管理的方法或类上添加 @Transactional 注解。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class MyService {@Autowiredprivate MyRepository myRepository;@Transactionalpublic void performTransactionalOperation() {// 进行数据库操作myRepository.save(new MyEntity(...));// ...其他操作}
}

4、配置事务属性:@Transactional 注解支持多个属性以配置事务行为,例如 propagation(传播行为)、isolation(隔离级别)、timeout(超时)和 readOnly(只读)。

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30, readOnly = false)
public void performTransactionalOperation() {// 业务逻辑
}

5、处理异常:默认情况下,Spring 的声明式事务会在出现运行时异常(非检查异常)时回滚事务。如果希望在检查异常时也回滚事务,可以指定 rollbackFor 属性。

@Transactional(rollbackFor = Exception.class)
public void performOperation() throws Exception {// 可能抛出检查异常的操作
}
http://www.xdnf.cn/news/1010.html

相关文章:

  • 文字、语音、图片、视频四个模态两两之间(共16种转换方向)的生成技术及理论基础的详细说明及表格总结
  • 【漫话机器学习系列】216.应对高方差(过拟合)的策略详解(Strategies When You Have High Variance)
  • 线上地图导航小程序源码介绍
  • uCOS3实时操作系统(任务切换和任务API函数)
  • MD5和sha1绕过方式总结
  • 第六章.java集合与泛型
  • 街景主观感知全流程(自建数据集+两两对比程序+Trueskill计算评分代码+训练模型+大规模预测)17
  • 冒泡排序详解
  • 使用若依二次开发商城系统-1
  • vue项目通过GetCapabilities获取wmts服务元数据信息并在openlayers进行叠加显示
  • 配置管理CM
  • 衡石chatbi如何通过 iframe 集成
  • 制作一款打飞机游戏14:资源优化
  • Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试
  • 性能比拼: Nginx vs Caddy
  • NHANES指标推荐:PhenoAge
  • Ldap高效数据同步- Delta-Syncrepl复制模式配置实战手册(上)
  • 极验4滑块笔记:整理思路--填坑各种问题
  • 傲来云分享,负载均衡:提升网站性能与稳定性
  • 无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性
  • 【前端】【面试】【业务场景】前端如何获取并生成设备唯一标识
  • 报错 | 配置 postcss 出现 报错:A `require()` style import is forbidden.
  • C++中的算术转换、其他隐式类型转换和显示转换详解
  • 开发指南:构建结合数字孪生、大语言模型与知识图谱的智能设备日志分析及生产异常预警系统
  • ByteTrack自定义数据集训练指南
  • 如何将SpringBoot前后端项目制作成windows运行的exe文件
  • 【python实用小脚本系列】用Python让鼠标“动起来”:光标自动移动、自动点击、自动图象识别的小技巧
  • 【教程】Digispark实现串口通信
  • 计算机是如何工作的
  • 使用Python可视化偶极子的电场