Spring4.2—— Spring的事务控制

SSH框架实战:机票订购系统数据库设计与事务控制 在Java企业级开发中,ORM映射、事务管理与并发控制是保障业务一致性的三大基石。理解Hibernate如何将对象状态映射到关系表结构,掌握Spring声明式事务的传播行为与隔离级别配置,结合乐观锁机制应对高并发订票场景,是构建可靠订单系统的核心能力。本文以真实机票订购系统为案例,深入剖析航班表与库存表的设计逻辑、Struts2表单校验与Action生命周期、Service层@Transactional精准控制,以及MySQL时区、连接池、密码哈希等典型避坑实践,覆盖从数据库建模、SQL审计友好性到HTTP 阅读详情

 1、传统事务控制存在的问题:

  持久化技术不同,事务控制的API也会不同,会导致事务控制代码也会随之改变。程序将Service层与DAO分离,目的就是为让Service只负责业务变化,DAO专门负责持久化技术的变化。事务控制代码需要放在Service层完成,持久化技术的改变,必然导致Service组件也要随之修改。

2、Spring的事务控制

(1)特征:Spring的事务管理不需要与任何特定的事务API耦合(面向PlatformTransactionManager)。对不同的持久层访问技术,编程式事务提供一致的事务管理,通过模块化的一致性操作管理事务。
(2)优势:
   ①不需要硬编码的方式写事务
   ②让业务逻辑API与具体的事务逻辑分离
   ③没有提供实际的事务支持,只是对底层的事务包装,所以能自由切换底层的事务

(3)事务控制中的策略模式:当程序要完成某个功能时(事务),但实现该功能可能有多个实现算法,目前不希望或不确定要采用哪种实现算法,此时可考虑使用策略模式。

      策略模式由如下部分组成:

   ① 一个策略接口,该策略接口只定义实现功能所需的方法,不提供实现。
        PlatformTransactionManager:事务控制的策略接口。只定义事务控制的3个方法。

   ②N个策略实现类:为不同的算法提供对应的策略实现类。
        DataSourceTransactionManager:采用JDBC持久化技术,用该事务策略实现类。
        HibernateTransactionManager:采用Hibernate持久化技术,用该事务策略实现类。
        JpaTransactionManager:采用JPA持久化技术,用该事务策略实现类。
        JtaTransactionManager:使用JTA全局事务,用该事务策略实现类
        WebLogicJtaTransactionManager, WebSphereUowTransactionManager

   ③Context类:负责为程序“智能”地选择一个策略实现类。 ——其实要靠配置。
        ApplicationContext

      TransactionDefinition:代表事务定义。用于指定事务相关属性。(隔离级别、传播性、超时、是否只读)

(4)Spring的事务控制有两种方式:

   ①编程式事务。需要自己来写Java代码控制事务。面向PlatformTransactionManager编程、还可结合AOP。

         a.增加aspect类

public class TxAspect {

	private PlatformTransactionManager transactionManager;
	public void setTransactionManager(PlatformTransactionManager transactionManager)
	{
		this.transactionManager = transactionManager;
	}
	// 定义一个Around Advice
	public Object tx(ProceedingJoinPoint jp){
		// 创建默认的事务定义(永不超时) ——是不好的。
		DefaultTransactionDefinition td = new DefaultTransactionDefinition();
		// 开启事务,  需要传入TransactionDefinition对象,用于指定事务相关的属性(隔离、传播、超时、只读)
		TransactionStatus status = transactionManager.getTransaction(td);
		Object rvt = null;
		try {
			rvt = jp.proceed(); // 直接使用原来的参数调用目标方法	
			transactionManager.commit(status);// 提交事务
		} catch (Throwable e) {
			e.printStackTrace();
			transactionManager.rollback(status);// 回滚事务
		}
		return rvt;
	}
}
        b.在appCtx中配置:

	<!-- 此处就是配置事务策略的实现类,也就是为PlatformTransactionManager指定实现类 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate5.HibernateTransactionManager"
		p:sessionFactory-ref="sessionFactory" />
	
	<bean id="txAspect" class="aspect.TxAspect"
		p:transactionManager-ref = "transactionManager"
	/>
	<aop:config>
		<aop:pointcut expression="execution(* service.impl.*.*(..))"
			id="pc" />	 
		<!-- 将txAspect当成Aspect使用 -->
		<aop:aspect ref="txAspect">
			<aop:around method="tx" pointcut-ref="pc"/>
		</aop:aspect>
	</aop:config>

   ②声明式事务。不需要自己写Java代码,只要用XML或注解配置即可。

      a.在appCtx中配置:

      注意:需要导入tx命名空间

<!-- 以下为事务配置 -->
	<!-- 为PlatformTransactionManager事务策略接口指定实现类,
		  ApplicationContext就会为我们选择该事务策略实现类
	  -->
	<bean id="transactionManager"
	 class="org.springframework.orm.hibernate5.HibernateTransactionManager"
		p:sessionFactory-ref="sessionFactory"/>

	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<!-- 下面就是用于定义事务属性  -->
		<tx:attributes>
			<!-- 访问get方法属性配置 -->
			<tx:method name="get*" read-only="true" timeout="8"/>
			<!-- 访问其他方法属性配置 -->
			<tx:method name="*" timeout="5"/>
		</tx:attributes>
	</tx:advice>

	<aop:config>
		<!-- 为切入点表达式起个名字 -->
		<aop:pointcut expression="execution(* service.impl.*.*(..))"
			id="pc" />
		<!-- 指定将指定的Advice,织入到切入点表达式所匹配的方法。 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pc" />
	</aop:config>      

其余代码可参考: Spring3.3节中s2sh整合

3、注解配置事务可参考:Spring 使用注解方式进行事务管理

基于Spring Boot的4S店维修管理系统:从接车到结算的数字化闭环 在处理企业内部管理系统时,前后端分离架构已成为主流。Spring Boot 作为快速构建后端服务的框架,配合 Vue 与 MyBatis Plus,能够高效实现业务数据的流转与控制。其核心原理在于通过分层架构、事务管理和状态机设计,保证从业务创建到完成的每一步数据一致性与可回溯性。以汽车 4S 店维修业务为例,一套管理系统需要贯穿接车登记、车间派工、配件出库、完工结算等环节。其中,配件库存扣减需依赖事务与条件更新来防止超卖,工单状态推进则借助乐观锁与状态机来避免并发冲突。以此类项目为案例,分析其技术选型、核 阅读详情

相关推荐

SQL Server 2025在Windows 11上的安装避坑指南

SQL Server 是微软主流关系型数据库管理系统,其安装与Windows操作系统深度耦合;Windows 11作为新一代桌面平台,强化了基于虚拟化的安全(HVCI)、驱动签名强制策略(WDAC)及内核隔离机制,导致传统数据库部署流程失效。理解二者底层交互原理,是解决服务启动失败、配置管理器无法打开、远程连接被拒等高频问题的技术前提。本文聚焦SQL Server 2025与Windows 11的兼容性挑战,覆盖系统预配置、安装节点诊断、防火墙与服务权限调优等工程实践环节,适用于高校教学、电赛备赛、中小企业

weixin_28741413的博客 320

【Spring】事务控制

有两种事务控制的方法:编程式(硬编码,代码,API)vs 声明式(xml或注解) 声明式的好处:事务管理不侵入开发的组件,更改只需要在定义文件中出现配置即可。业务逻辑对象不会意识到处在事务管理之中,事实上也该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分。而且不需要事务管理时可关闭,符合开闭原则。(解耦) Spring声明式事务控制底层就是aop。 编程式事务控制3大对象: (关系)PlatformTransactionManager(操作事务行为)+TransactionDe.

m0_56249083的博客 615

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

在Spring 4.2中更简单地处理异步事务绑定事件

介绍 如您可能已经知道的(例如,从我以前的博客文章中 ),不再需要创建一个单独的类,该类使用onApplicationEvent方法实现ApplicationListener以便能够对应用程序事件做出响应(包括来自Spring Framework本身和我们自己的域事件)。 从Spring 4.2开始,添加了对注释驱动的事件侦听器的支持。 在方法级别使用@EventListener就足够了,该...

最佳 Java 编程 227

修改Avaya IP-Office电话交换机出厂自带的提示语音内容

1,本文的应用场景是在使用Avaya IP-office 500 v2电话交换机时,来电振铃超时后,会转入语音信箱,呼叫者会听到一条语音信箱留言的欢迎辞(…请留言…)。但我们单位情况比较特殊,首先是的IPO配置很精简,内嵌的语音信箱只能保留3天,用处不大;其次是用户没有收听语音信箱的习惯;第三是我们单位使用数字中继和DID,每人一个直拨号码,不通过总机转接。很多业务是单线联系,所以一旦来电无法接通,来电者可能完全无法联系到我们单位的其他同事。出于这三点原因,我们希望将语音信箱的欢迎辞,增加告知我们的总机电话

qlin4cn的博客 4919

无需Root!安卓模拟器+BurpSuite轻松搞定微信小程序抓包

本文详细介绍了如何在不root安卓设备的情况下,使用安卓模拟器和BurpSuite实现微信小程序抓包。通过夜神模拟器降级安卓版本、配置BurpSuite代理及安装证书等步骤,开发者可以轻松绕过微信的证书绑定,高效抓取小程序数据包。文章还提供了常见问题排查和高阶技巧,帮助开发者提升抓包效率。

weixin_29213655的博客 365

spring事物配置,声明式事务管理和基于@Transactional注解的使用

事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。  声明式事务管理建立在

不学习就淘汰 30万+

​​EMC设计实战:BCI(大电流注入)硬件设计规范

LIN接口:集成TVS管(如PESD5V0S1BL)与共模电感,耐压等级≥20V(8kV HBM)。输入滤波:10μF电解电容(100kHz截止)+ 0.1μF陶瓷电容(10MHz截止)。​:全频段(1MHz-400MHz)注入200mA电流,LIN通信误码率<0.01%。对敏感电路(如传感器)采用隔离电源(如ADuM5000),隔离电压≥3kVrms。​:连续波(CW)与调幅波(AM,调制深度80%)组合,覆盖全频段干扰场景。​:选择低频段(1-100MHz)感量≥100μH的绕线电感,抑制共模电流。

m0_50833886的博客 1938

springBoot-rabbit MQ-设置手动确认ACK-Channel

自动确认消费,不管 try 中有没有异常,消息管理界面上队列里的消息都被消费了,没有ready和unacked状态栏; 手动确认,未被消费的消息有多少条都会在ready状态栏下,分发到消费端后,消费端没有回发ack的消息会在unacked状态栏中。 MQ配置的时候,如果配置了json解析器。如下: @Bean("exchangeSendPoEccIntegrationRes...

fwk19840301的博客 6847

【网络安全】Centos7安装杀毒软件----ClamAV

Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。

你在看屏幕的同时,屏幕也在注视着你 8828

MATLAB实战:5步搞定GNSS单点定位解算(附完整代码)

本文提供了一份基于MATLAB的GNSS单点定位实战指南。通过5个核心步骤,详细讲解了如何从卫星坐标和伪距观测值出发,利用最小二乘迭代算法,构建并实现一个完整的单点定位解算器。文章附有完整代码,并涵盖精度评估与结果分析,适合GNSS初学者和MATLAB用户快速上手实践。

a2b3c4d5e的博客 250

Spring MVC @Transactional注解方式事务失效的解决办法

前文提到,最新换了框架,新项目用SpringMVC + Spring JdbcTemplate。搭框架时,发现了一个事务无法正常回归的问题,记录如下: 首先展示问题: Spring applicationContext.xml配置: java:comp/env/jdbc/will <bean id="txManager

枯鸦专栏 3万+

RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络

本文记录的是利用颈部结构优化RT-DETR的目标检测网络模型。利用改进后的颈部网络,通过跳层连接,避免了在进行反向传播时的梯度消失问题,并且引入跨尺度连接,可以实现不同级别和层次的特征充分融合,获取足够的高层语义信息和低层空间信息交换,从而在大规模变化场景下提高检测性能。GIRAFFEDET: A HEAVY-NECK PARADIGM FOR OBJECT DETECTION-GFPN包含了上述的跳层连接(dense-link和log2nlog _{2} nlog2​n-link)以及跨尺度连接(Quee

Limiiiing的博客 2229

菜单管理删除操作:Spring Boot 2.x 中 4 种数据完整性校验与事务控制策略

本文详细介绍了Spring Boot 2.x中菜单删除操作的四种数据完整性保障策略,包括数据库外键约束与级联删除、应用层逻辑校验与编程式事务、声明式事务管理以及软删除策略。这些方法帮助开发者在处理菜单管理删除操作时确保数据完整性,适用于不同业务场景。

weixin_33698823的博客 457

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Spring事务(2)------事务控制方式(4)事务传播行为

事务传播行为 事务管理员 事务协调员 事务传播行为:描述的是事务协调员对事务管理员所携带事务的处理态度 就是事务协调员金的事务和事务管理员的事务的关系,也就是事务协调员对事务管理员所带的事务的一个态度 REQUIRED:如果事务管理员开启了一个事务,那么如果事务协调员就会加入这个事务,所以他们两个都是用同一个事务都是T1;如果事务管理员没有开事务,那么事务协调员就会直接新建一个事务 REQUIRES NEW:事务管理员不管开启还是没有开启一个事务,事务协调员都会再新建一个事务

учёба 372

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

spring3注解注入Bean

最近在公司搭建一个基于struts2.3.16+spring3.28+hibernate4.2的框架,需要有基本的用户、角色、权限模块,系统里面用到的服务接口和持久化接口全部采用注解的方式,一开始在action层的类里面都显式的加上@Autowired注解标志注入服务,后面发现这些action类里面去掉注解也可以注入,后面发现这些action类其实已经配置在struts2的配置文件里面了(bea...

IT Lover 178

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SSM整合(Spring/SpringMVC/Mybatis)

SSM整合(Spring/SpringMVC/Mybatis) 1.该SSM以Maven的方式进行整合 2.首先创建一个Maven工程,目录结构如下 3.Spring环境的搭建

xinzai245的博客 255

Java工程师的Agent开发实战:Spring AI与AI4J工程化落地

Agent(智能体)是大模型时代的关键应用范式,其本质是具备感知、决策与执行能力的可编排业务流程。不同于单次API调用,生产级Agent需支持状态管理、事务控制、工具调用、可观测性与灰度发布——这正是Java工程师最擅长的工程能力范畴。依托Spring生态的线程模型、事务抽象(TransactionTemplate)、熔断降级(Resilience4j)和全链路追踪(SkyWalking),Java能天然承载高可靠Agent架构。Spring AI提供模型调度中枢与标准化AiModel/ChatClient

weixin_29800471的博客 229

Spring事务控制

Spring事务介绍、事务控制、Spring中事务控制的API介绍、Spring动态代理控制事务、Spring AOP控制事务、基于注解的AOP控制事务

qq_62965575的博客 2575

Spring 事务控制

文章目录1. Spring 事务控制说明2. Spring 事务控制的 API2.1 PlatformTransactionManager2.2 TransactionDefinition2.3 TransactionStatus3. 基于 XML 的声明式事务控制3.1 环境搭配3.2 配置声明式事务3.2.1 配置声明式事务的步骤3.2.2 配置声明式事务的实例3.3 测试类4. 基于注解的声...

bm1998 2460

Spring事务控制总结

Spring框架为我们提供了一组事务控制的API,本文在此总结下如何通过XML方式和注解方式,进行配置事务控制。 Spring 中事务控制的 API 介绍 PlatformTransactionManager 此接口是 spring 的事务管理器,它里面提供了我们常用的操作事务的方法,如下图: 我们在开发中都是使用它的实现类,如下图: TransactionDefinition 它是事务的定...

rotation博客 970

spring4之service层事务控制

spring4之service层事务控制

墙角儿的花 753

Spring——事务控制

Spring事务控制: 1、JavaEE 体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方 案 2、Spring 框架为我们提供了一组事务控制的接口,这组接口在spring-tx-5.0.2.RELEASE.jar中 3、Spring 的事务控制都是基于AOP的,它既可以使用配置的方式实现,也可以使用编程的方式实现.推荐使用配置方式实现. 数据库事务的...

Paranoidse的博客 570
上一篇: Spring4.1——AOP
下一篇: SpringMVC 1.1——入门
ack_Finding
博客等级 码龄10年 6粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值