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提供了一种简单而强大的声明式事务管理机制,使得事务管理与业务逻辑解耦,提高了代码的可维护性和可读性。
相关文章:
Spring Boot 声明式事务
Spring Boot中的声明式事务管理主要通过Transactional注解来实现。以下是Transactional注解的一些关键用法和特性: 1. 启用事务管理 在Spring Boot应用中使用Transactional注解之前,需要在启动类或者配置类上添加EnableTransactionManagement注解来启用事…...
websocket 局域网 webrtc 一对一 多对多 视频通话 的示例
基本介绍 WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和&am…...
uniapp-微信小程序调用摄像头
1.uniapp中的index.vue代码 <template><view class"content"><view class"container"><!-- 摄像头组件 --><camera id"camera" device-position"front" flash"off" binderror"onCameraErr…...
鸿蒙学习笔记:用户登录界面
文章目录 1. 提出任务2. 完成任务2.1 创建鸿蒙项目2.2 准备图片资源2.3 编写首页代码2.4 启动应用 3. 实战小结 1. 提出任务 本次任务聚焦于运用 ArkUI 打造用户登录界面。需呈现特定元素:一张图片增添视觉感,两个分别用于账号与密码的文本输入框&#…...
无人机航测系统技术特点!
一、无人机航测系统的设计逻辑 无人机航测系统的设计逻辑主要围绕实现高效、准确、安全的航空摄影测量展开。其设计目标是通过无人机搭载相机和传感器,利用先进的飞行控制系统和数据处理技术,实现对地表信息的全方位、高精度获取。 需求分析࿱…...
《算法ZUC》题目
判断题 ZUC算法LFSR部分产生的二元序列具有很低的线性复杂度。 A.正确 B.错误 正确答案A 单项选择题 ZUC算法驱动部分LFSR的抽头位置不包括( )。 A.s15 B.s10 C.s7 D.s0 正确答案C 单项选择题 ZUC算法比特重组BR层主要使用了软件实现友好的…...
配置flutter 解决andriod studio报错 no device selected
flutter配置好后 明明下载好了模拟器 但是在andriod studio 找不到设备 显示no devices 这个时候需要我们配置一下flutter关联的android sdk的路径和文件夹 就可以解决了 flutter config --android-sdk 自己android studio的路径 这样配置就可以解决了~...
docker搭建Redis集群及哨兵(windows10环境,OSS Cluster)
一、基本概念 Redis:即 "Remote DIctionary Server" ,翻译为“远程字典服务器”。从字面意义上讲,它指的是一个远程的字典服务,意味着它是一个可以远程访问的服务,主要用于存储键值对(key-value pairs&…...
信息化基础知识——数字政府(山东省大数据职称考试)
大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数字政府 大数…...
信息安全实训室网络攻防靶场实战核心平台解决方案
一、引言 网络安全靶场,作为一种融合了虚拟与现实环境的综合性平台,专为基础设施、应用程序及物理系统等目标设计,旨在向系统用户提供全方位的安全服务,涵盖教学、研究、训练及测试等多个维度。随着网络空间对抗态势的日益复杂化…...
Nginx主要知识点总结
1下载nginx 到nginx官网nginx: download下载nginx,然后解压压缩包 然后双击nginx.exe就可以启动nginx 2启动nginx 然后在浏览器的网址处输入localhost,进入如下页面说明nginx启动成功 3了解nginx的配置文件 4熟悉nginx的基本配置和常用操作 Nginx 常…...
PySide6程序框架设计
pyside6有一个优点自动适配高分辨ui pyqt5需要自己写这部分逻辑 1、主程序代码 DINGSHI01Main.py # -*- coding: utf-8 -*- import sys,time,copy from PySide6.QtWidgets import QWidget,QApplication from PySide6.QtCore import Qt from PySide6 import QtCore, QtGui, Q…...
「九」HarmonyOS 5 端云一体化实战项目——「M.U.」应用云侧开发云数据库
1 立意背景 M. 代表 “我”,U. 代表 “你”,这是一款用于记录情侣从相识、相知、相恋、见家长、订婚直至结婚等各个阶段美好记忆留存的应用程序。它旨在为情侣们提供一个专属的空间,让他们能够将一路走来的点点滴滴,如初次相遇时…...
记录:virt-manager配置Ubuntu arm虚拟机
virt-manager(Virtual Machine Manager)是一个图形用户界面应用程序,通过libvirt管理虚拟机(即作为libvirt的图形前端) 因为要在Linux arm环境做测试,记录下virt-manager配置arm虚拟机的过程 先在VMWare中…...
clickhouse-介绍、安装、数据类型、sql
1、介绍 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。 OLAP(On-Line A…...
【shell】常用100个shell命令使用讲解
【shell】常用100个shell命令使用讲解 【一】文件操作命令【二】搜索命令【三】目录操作命令【四】权限操作命令【五】网络操作命令【六】进程和系统控制命令【七】文本操作命令【八】压缩与解压命令【九】磁盘使用管理命令【十】包管理命令【十一】进程管理命令【十二】环境变…...
Git-分支(branch)常用命令
分支 我们在做项目开发的时候,无论是软件项目还是其他机械工程项目,我们为了提高效率以及合理的节省时间等等原因,现在都不再是线性进行,而是将一个项目抽离出诸进行线,每一条线在git中我们就叫做分支,bran…...
谈谈es6 Map 函数
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Map 是 ES6 中引入的一种新的数据结构,它类似于对象(Object),但与对象相比&#…...
微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列
参考说明 微信小程序实现流程进度功能 - 知乎 上面的为一个节点进度条的例子,但并不完整,根据上述代码,进行修改完善,实现其效果 横向效果 代码 wxml <view classorder_process><view classprocess_wrap wx:for&quo…...
【Unity3D】无限循环列表(扩展版)
基础版:【Unity技术分享】UGUI之ScrollRect优化_ugui scrollrect 优化-CSDN博客 using UnityEngine; using UnityEngine.UI; using System.Collections.Generic;public delegate void OnBaseLoopListItemCallback(GameObject cell, int index); public class BaseLo…...
QuickBMS深度解析:游戏资源提取与逆向工程的终极工具箱
QuickBMS深度解析:游戏资源提取与逆向工程的终极工具箱 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS 在游戏开发和逆向工程领域,面对数百种不同的压缩格式、加密算法和…...
高效大麦抢票自动化工具实战指南:开源项目的专业配置教程
高效大麦抢票自动化工具实战指南:开源项目的专业配置教程 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 大麦网作为国内领先的演出票务…...
复旦微FMQL平台:memorytest工程实战指南与DDR稳定性验证
1. 从Procise导出memorytest工程 第一次接触复旦微FMQL平台时,我也被各种工程文件搞得晕头转向。memorytest工程作为内存测试的基础工具,其实导出过程比想象中简单得多。在Procise界面中找到memtest选项,就像在Windows资源管理器里找文件夹一…...
MotorController:嵌入式伺服电机驱动的确定性执行封装
1. 项目概述MotorController是一个面向伺服系统电机控制的轻量级工具类,其设计目标并非替代完整的运动控制固件栈,而是为嵌入式工程师提供一套可直接集成、低侵入、高可控性的底层电机驱动封装。该类不依赖特定硬件抽象层(HAL)或实…...
实战指南:基于快马平台生成git自动化部署脚本,实现ci/cd流水线
今天想和大家分享一个实战中特别实用的技巧:如何用git结合自动化脚本来简化版本发布和部署流程。这个方案在我们团队的实际项目中已经稳定运行了大半年,效果非常不错。 版本号自动打tag功能 这个脚本的核心功能之一就是自动读取项目中的版本号文件&…...
一站式AI应用开发:在PyTorch 2.8环境中集成Dify与Ollama部署大模型
一站式AI应用开发:在PyTorch 2.8环境中集成Dify与Ollama部署大模型 1. 企业级AI开发的新范式 想象一下这样的场景:你的开发团队需要在两周内上线一个智能客服系统,要求能理解专业术语、生成高质量回复,还要能与企业现有系统无缝…...
企业员工福利平台选型:技术架构与对接难点拆解
企业员工福利平台选型:技术架构与对接难点拆解“选对企业员工福利平台,技术架构与系统对接是决定落地成败的关键——忽略技术适配性的选型,往往会让福利项目陷入‘上线易、用着难’的困境。”随着企业数字化转型加速,员工福利从“…...
【数字电路】从双稳态到触发器:时序逻辑的存储基石
1. 数字世界的记忆细胞:双稳态电路探秘 当你按下电脑电源键的瞬间,数十亿个微型存储单元开始工作,它们就像数字世界的记忆细胞,忠实地记录着每一个比特的信息。这一切的起点,正是我们今天要探讨的双稳态电路。想象一下…...
终极指南:如何用res-downloader一键下载全网无水印资源
终极指南:如何用res-downloader一键下载全网无水印资源 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否经常…...
学习网络安全至少需要什么配置的电脑?
很多同学对于学习 Web 渗透所需的电脑配置仍有疑问,所以老师结合自己的教学经验,总结了关于电脑配置要求的一些内容,遂成此文。当然,对于电脑配置的追求是无上限的,所以有条件的话最好还是搞一台配置强劲的电脑。 一、…...
