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

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI篇持续更新中!(长期更新)

目前2025年06月05日更新到:
AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书,持续打造实用AI工具指南!📐🤖

💻 Java篇正式开启!(300篇)

目前2025年06月05日更新到:
Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
MyBatis 已完结,Spring 正在火热更新中,深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!
目前2025年06月05日更新到:
大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

👉 点个关注,不迷路!后续还将持续更新更多大模型+数据智能+工程实战内容,敬请期待!

在这里插入图片描述

事务配置

事务(Transaction)是指一组操作,要么全部成功,要么全部失败,保持数据一致性。Spring 提供对声明式事务的支持,底层基于 AOP 原理,实现对方法调用的增强。

纯XML模式

Jar包

我们需要确保下面的依赖都是存在的:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.12.RELEASE</version>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.4</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.12.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.12.RELEASE</version>
</dependency>

对应的代码如下所示:
在这里插入图片描述

XML 样例

核心的配置如下,这里是个demo:

<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><!-- 数据库连接参数 -->
</bean><!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" />
</bean><!-- 启用事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager" /><!-- 或者使用事务拦截器 + AOP方式 -->
<aop:config><aop:pointcut id="serviceOperation" expression="execution(* com.xxx.service.*.*(..))" /><aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="get*" read-only="true" /><tx:method name="find*" read-only="true" /><tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception" /><tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception" /><tx:method name="*" propagation="REQUIRED" /></tx:attributes>
</tx:advice>

XML配置

<tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- 定制事务的细节、传播行为、隔离级别等 --><tx:attributes><!-- 一般属性配置 --><tx:method name="*" read-only="false" propagation="REQUIRED" isolation="DEFAULT" timeout="-1" /><!-- 针对查询的覆盖性配置 --><tx:method name="query*" read-only="true" propagation="SUPPORTS" /></tx:attributes></tx:advice><aop:config><!-- advice-ref 指向增强=横切逻辑+方位 --><aop:advisor advice-ref="txAdvice" pointcut="execution(* wzk.service.impl.WzkTransferServiceImpl.*(..))" /></aop:config>

对应的截图如下所示:
在这里插入图片描述

基于XML+注解

<!--配置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!--开启spring对注解事务的⽀持--><tx:annotation-driven transaction-manager="transactionManager"/>

在接口、类或者方法上添加Transactional注解

@Transactional(readOnly = true,propagation = Propagation.SUPPORTS)

基于纯注解

Spring注解驱动开发的事务控制配置,只需要把XML配置的部分改为注解实现即可。
注解替换到XML配置文件中的 <tx:annotation-driven transaction-manager=“xxx”> 配置
接着在Spring的配置添加:

// 开启对事物的支持
@EnableTransactionManagement
  • propagation:事务传播行为,如 REQUIRED、REQUIRES_NEW
  • isolation:事务隔离级别,如 READ_COMMITTED
  • timeout:事务超时时间(秒)
  • readOnly:是否只读事务,提升查询性能
  • rollbackFor:指定哪些异常类型触发回滚(如 Exception.class)
  • noRollbackFor:指定哪些异常类型不触发回滚

相关文章:

  • 深度解析云存储:概念、架构与应用实践
  • XMLGregorianCalendar跟Date、localDateTime以及String有什么区别
  • VisualXML全新升级 | 新增数据库编辑功能
  • 【深度学习新浪潮】大模型中,active parameters和total parameters都是什么?
  • rnn判断string中第一次出现a的下标
  • Unity-ECS详解
  • Ubuntu里面单独编译某一个模块
  • DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
  • FreeRTOS学习02_任务管理
  • [论文阅读]人工智能 | CoMemo:给大视觉语言模型装个“图像记忆”
  • 一种使用 PowerToys 的键盘管理器工具重新映射按键实现在 Windows 上快捷输入字符的方式
  • 在Spring Boot中集成RabbitMQ的完整指南
  • iview组件库:使用Menu组件时手风琴属性accordion失效的解决方案
  • C#模式匹配深度解析与最佳实践
  • 【C#】多级缓存与多核CPU
  • 图解C#教程 第五版 第4章 类型、存储和变量 笔记
  • Ace网络验证软件卡密系统-免费免搭建 记录整理
  • 电脑插入多块移动硬盘后经常出现卡顿和蓝屏
  • Promise 链式调用:让异步编程更优雅
  • (1-6-4) Java IO流实现文件的读取与写入
  • 网站建设好后的手续交接/google国外入口
  • 做模板网站赚钱吗/媒体发稿网
  • 如何选择顺德网站建设/济南做网站公司
  • 天津企业网站建设公司/微信营销平台
  • 免费网站发布怎么做的/网络关键词优化方法
  • 盐城做网站/网页搜索快捷键