4、Spring中关于事务的处理

VTK的编译和部署,配合c++和visual studio2022,VTK开发环境的配置 在官网选择最新的版本下载之后进行解压,然后再里面创建build目录,方便后面使用cmake进行编译。 阅读详情

Spring中对于事务的处理是使用Spring中非常重要的一项技术,Spring提供了一个统一的处理事务的模型它跨越JTA、JDBC、Hibernate、JPA等事务处理的API支持声明式的事务管理(我们最长听说的Spring的优点),同EJB中的声明式事务管理差不太多。这里啰嗦一下关于事务的管理Java中关于事务的处理概念有些多包括最基本的JDBC事务、Java的事务管理接口JTA、Hibernate也封装了自己的事务管理、包括本地事务和全局事务、Bean管理的事务和容器管理的事务(EJB重点CMT)、EJB有声明式的事务管理,这些概念有些事交叉和重叠的或者是以不同的角度进行的分类、关于java中事务的一下概念接触的多你可以就会有自己的体会,这里推荐一部本人认为还不错的一本书【Java事务设计策略】这本书相对简单可入门但要求你对各项技术有个大致的了解在看,个人认为只要你了解事务的本质这些技术都是为简化我们的编程。本文将主要介绍Spring的事务管理,其他内容请自行查找资料如果你愿意可以和笔者一起讨论,如果你认为本文有什么不正确的地方欢迎指出,可以通过网页下方的邮箱与本人联系。

1、Spring中事务的抽象

2、Spring的声明式事务管理

3、Spring可编程事务管理


1、Spring中事务的抽象

Spring为了统一各种事务处理抽象了一些基本的接口用来处理事务(当然你要对这些事务有个基本的了解),下面将介绍几个Spring最基本的接口来说明Spring对事务处理的抽象:

PlatformTransactionManager:这是Spring中关于事务最主要的接口,这是一个Service Provider Interface(SPI),你也可以使用它来处理编程处理事务,PlatformTransactionManager是一个接口他不会与JNDI资源紧密连接你可以通过Spring IoC容器轻松的获得PlatformTransactionManager的实现,Spring定义了一个TransactionException(继承java.lang.RuntimeException)异常来响应Spring中的事务异常,Developer可以选择处理这个异常但不是强制的,PlatformTransactionManager的任何方法都可以抛出未被捕获TransactionException异常。我们来看一下PlatformTransactionManager的定义:

public interface PlatformTransactionManager {

  TransactionStatus getTransaction(TransactionDefinition definition)
    throws TransactionException;

  void commit(TransactionStatus status) throws TransactionException;

  void rollback(TransactionStatus status) throws TransactionException;
}
getTransaction(..):依赖TransactionDefinition参数返回一个TransactionStatus对象(下面介绍),TransactionStatus可以代表一个新的事务(1)或已经存在当前运行占中的一个已经存在的事务(2),(2)对于于J2EE事务上下文来说TransactionStatus与当前执行线程相关。

TransactionDefinition:这个接口中定义了一下关于事务的属性

isolation:事务隔离级别,默认为TransactionDefinition.ISOLATION_DEFAULT

propagation:事务传播特性,典型的是事务一个事务在一个Scope中执行,你也可以改变事务的行为当一个事务已经存在你可以挂起该事物新起一个事务执行执行完后在将前一个事务恢复执行,这是个嵌套在事务里的事务。Spring提供了类似于EJB总CMT的所有事务传播特性。

Timeout:事务超时设置

Read-only status:指定事务为只读事务

TransactionStatus:这是一个控制事务和查询事务状态的简单接口;

public interface TransactionStatus extends SavepointManager {

    boolean isNewTransaction();

    boolean hasSavepoint();

    void setRollbackOnly();

    boolean isRollbackOnly();

    void flush();

    boolean isCompleted();

}

在Spring无聊你使用声明式事务管理还是编程管理事务定义一个PlatformTransactionManager是最基本的,PlatformTransactionManager的实现需要了解事务执行的环境像JDBC、JTA、Hibernate等,我们不需要去实现这个接口,Spring对各种环境都提供了一个相应的类来供开发者使用,你要做的就是确定你所使用的事务环境并在Spring中声明即可。下面将展示一个基本的JDBC事务;

声明JDBC DataSource:(这里使用的是dbcp,如果你使用的是proxool数据源或等其他数据源再这里修改即可)

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
</bean>

将数据源和Spring的PlatformTransactionManager联系起来;

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
</bean>
如果你使用的是Java EE容器中JTA你可以使用容器提供的DataSource,一般容器提供的DataSource同JNDI访问;

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:jee="http://www.springframework.org/schema/jee"
     xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/jee
     http://www.springframework.org/schema/jee/spring-jee.xsd">

  <jee:jndi-lookup id="dataSource" jndi-name="jdbc/testDataSource"/>

  <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />

</beans>
如果你使用Hibernate提供的事务如下:1、提供SessionFactory实例;2、注册事务管理器

<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan">
			<list>
				<value>com.xyz.project</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
				<prop key="hibernate.show_sql">false</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
	</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>

如果你使用Hibernate在JTA事务下修改一下注册的事务管理器;

<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
在上述的情况下你的程序不许要做其他的任何改变,只是修改配置文件来配置是使用全局事务还是本地事务就可以了。

2、Spring的声明式事务管理(大多数情况下我们都会这样做)

Spring的声明式事务管理依赖Spring的AOP,Spring的声明式事务管理和EJB的CMT非常相似,你可以在方法级别上实现用户定义行为,必要的时候也可以调用setRollbackOnly(),下面是与EJB CMT的一下对比:

1)EJB CMT是与JTA事务紧密相关的,而Spring的声明式事务管理可以使用上面提到的任何事务环境。

2)你可以在Spring的任何类中使用

3)你可以声明事务回滚的规则,这个在编程管理事务和声明式事务管理中都可以使用

4)Spring中你可以通过AOP技术加入自定义行为,在EJB中你不能影响事务的行为除非设置了setRollbackOnly()

5)Spring不支持跨远程的事务上下文,如果以要这么做就使用EJB吧

。。。。。。。。。。


SolidWorks+ADAMS双验证:你的机械臂力矩计算真的靠谱吗? 本文探讨了机械臂力矩计算中手工计算的局限性,并介绍了SolidWorks和ADAMS双验证方法的重要性。通过实际案例展示了动态工况下传统计算方法的误差,详细解析了SolidWorks精准质心捕捉和ADAMS动力学仿真的关键技术,帮助工程师构建计算-仿真-实测闭环验证流程,确保机械臂设计的可靠性和安全性。 阅读详情

相关推荐

K型热电偶负电压采集难题?3种运放电路设计方案对比(含Multisim仿真)

本文针对K型热电偶在低温测量中产生的负电压采集难题,详细对比了三种运放电路设计方案,包括双电源运放反相放大、单电源仪表放大器和差分放大电路,并结合Multisim仿真数据分析了各方案的性能差异。文章还提供了PCB布局和抗干扰设计的实战技巧,帮助工程师解决热电偶信号采集中的核心挑战。

postgres8guard的博客 1018

Spring事务(Transaction)管理高级篇一栈式解决开发中遇到的事务问题

如果方法上加了事物注解的类,Spring会创建它的一个代理类放到容器中,如果没加注解(PS本文只考虑事物注解不考虑其他的)那么Spring就会把它原始的对象放到容器中这个很重要,后面总结事物为什么会失效。Spring是目前Java开发中最流行的框架了,它的事务管理我们在开发中常常的用到,但是很多人不理解它事务的原理,导致开发中遇到事务方面的问题往往都要用很长的时间才能解决,下面就带着大家去深入了解Spring的事务,然后文章的最后还会给出开发中常常遇到的问题以及解决方案。2:导入了一个事务属性的资源。

Gefangenes的博客 188

手把手调试:如何为高通Hypervisor上的GuestOS添加一个自定义的HAB服务通道

本文详细介绍了如何在高通Hypervisor环境下为GuestOS添加自定义HAB服务通道的全过程。从HAB通信框架的核心概念解析到设备树节点的动态注入机制,再到物理通道的内核层实现和用户层测试,提供了完整的开发案例和调试技巧,帮助开发者高效构建定制化通信服务。

weixin_27066963的博客 371

Spring的事务详解

Spring的事务详解

h295928126的博客 5万+

华三(H3C)网络设备配置命令大全与学习指南

本文全面介绍 H3C 网络设备的配置命令,涵盖路由器、交换机、ACL、NAT、VTY、SSH、本地用户、日志、STP、防火墙、QoS 等模块,适合网络工程初学者与运维人员参考。

DreamCollector的博客 6564

Isaac Sim 车辆动力学:从参数调优到户外仿真的挑战与实战

本文深入探讨了Isaac Sim在车辆动力学仿真中的应用,从参数调优到户外场景模拟的实战经验。详细解析了悬架系统、轮胎物理模型等核心参数的设置技巧,并分享了应对户外仿真挑战的实用方案。通过Vehicle Wizard高级使用和传感器配置,帮助开发者高效完成车辆仿真与算法开发。

weixin_29192211的博客 404

Spring 事务(详解)

将⼀组操作封装成⼀个执⾏单元,要么全部成功要么全部失败。

qq_45559559的博客 1万+

5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO怎么选?

本文深度对比了GelSight、DIGIT、Taxim、GelSlim和TACTO五种主流触觉传感器的技术原理与应用场景。针对机器人及VR项目的选型需求,文章从光学与电子传感的技术分野出发,分析了各传感器在分辨率、响应速度、集成难度和成本上的核心差异,并提供了从需求出发的实战选型决策框架,帮助开发者找到最适合的触觉解决方案。

weixin_29268637的博客 695

Spring的事务

1.什么是事务 事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操 作都失败 (2)典型场景:银行转账 lucy 转账 100 元 给 mary lucy 少 100,mary 多 100 事务四个特性(ACID) (1)原子性 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做 (2)一致性 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 (3)隔离性 一个事务的执行不能被其他事务干扰...

weixin_44895829的博客 1万+

elegant(ELEctron Generation ANd Tracking)入门指南(1)

elegant (ELEctron Generation ANd Tracking),美国先进光子源(APS)所用的圆环加速器的模拟程。

qq_41106132的博客 1847

01 - 什么是SVM

摘要:SVM(共享虚拟内存)技术使CPU和GPU能共享同一虚拟地址空间,简化异构计算编程。传统模型需手动管理CPU/GPU内存和拷贝数据,而SVM允许直接传递指针,自动处理页面迁移和一致性维护。其核心包括统一地址空间、按需迁移、页面故障处理和一致性管理,显著降低编程复杂度并提升性能。通过HMM框架、MMU通知和GPU页面异常等机制实现高效内存共享,支持复杂数据结构,为异构计算带来便利。

图形/计算GPU的驱动与虚拟化技术分享园地 3127

Spring事务

一、什么是事务 1.1 事务的概念 事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 通俗的讲,就是为了达到某个目的,而做的一系列的操作,要么一起成功(事务提交),要么一起失败(事务回滚)。 最常见的例子就是转账: 小明给如花转账: 开启事务------- 从小明的账户扣除1000块 给如花的账户增加1000块 事务提交------- 上面例子的任何步骤

Jak的博客 7619

在 SAP SD(销售与分销)模块中,销售合同 / 订单的抬头(Header) 和行项目(Item) 核心数据表如下,按 “核心表 + 扩展表” 分类说明,同时区分销售合同(Contract,类型 W

SAP SD模块中销售合同/订单的核心数据表分为抬头和行项目两类。核心抬头表包括VBAK(基础数据)和VBUK(状态数据),核心行项目表包括VBAP(基础数据)和VBUP(状态数据)。扩展表包含VBAKE(抬头增强)、VBAPe(行项增强)、VBEP(计划行)、VBFA(凭证流)等。销售合同(WK/WC)和订单(OR)通过VBAK-AUART字段区分,核心表结构相同。查询时需注意单据类型筛选,并通过VBELN主键关联抬头和行项数据,KNUMV关联定价条件,VBFA表追踪凭证流。

金牌架构师 1090

mongodb java 事务处理_使用 Spring Data 进行 MongoDB 4.0 事务处理

使用 Spring Data 进行 MongoDB 4.0 事务处理在MongoDB 4.0中,ACID 事务已经用于Document的存储,强制维护全执行或全不执行的数据一致性状态。所以让我们直接在 synchronous 模型和 reactive 执行模型中验证该特性。在撰写本文时,MongoDB 的多文档事务在单副本集中受支持,并且给用户的感受像是在使用关系型数据库的事务一样。看到驱...

weixin_39857876的博客 1045

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring事务监听机制---使用@TransactionalEventListener处理数据库事务提交成功后再执行操作(附:Spring4.2新特性讲解)【享学Spring】

前言 从标题就可以看出,本篇文章内容既和Spring的事件/监听机制有关,同时还和Spring事务以及Spring事务同步机制有关。 为了给这篇文章铺好路,建议可以先了解下: Spring事件监听机制: 【小家Spring】从Spring中的(ApplicationEvent)事件驱动机制出发,聊聊【观察者模式】【监听者模式】【发布订阅模式】【消息队列MQ】【EventSourcing】… Spr...

架构师:通透,才能写出好代码! 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

最佳 Java 编程 134

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mongodb java 事务处理_MongoDB4.0+Spring5环境搭建及开启事务功能Demo

背景最近项目中用到了Nosql数据库mongodb和SpringMVC框架。随着项目的深入,遇到了一些困难,于是把这些困难的解决记录下来,希望以后能帮助到其他人。技术介绍Spring Data MongoDBSpring Data’s mission is to provide a familiar and consistent, Spring-based programming model fo...

weixin_34513436的博客 653

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

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

最佳 Java 编程 184

Spring 4.1 Spring中的事务处理

Spring 有一整套的事务管理机制,开发人员在使用的时候不用了解在在底层是怎么实现的。可以使用这样的事务机制,处理各种情况下的事务处理 PART ONE:注解实现事务 在spring中不同的操作有不同的事务管理器 JDBC事务管理器: DataSourceTransactionManager Hibernate 对应的事务管理器:HIbernateTransactionManager ... ...

Stitch__的博客 240

spring4+hibernate4事务处理

最近总是遇到HibernateException: Could not obtain transaction-synchronized Session for current thread错误业务场景:在job中执行Service中的方法(事务是在xml中配置,针对所有service的方法的)我的springContext.xml配置如下:&lt;tx:advice id="txAdvice" t...

paul_lmc的专栏 357

使用 Spring Data 进行 MongoDB 4.0 事务处理

使用 Spring Data 进行 MongoDB 4.0 事务处理 原文链接:http://spring.io/blog/2018/06/28/hands-on-mongodb-4-0-transactions-with-spring-data 作者:christophstrobl 译者:hh23485 在MongoDB 4.0中,ACID 事务已经用于Document...

weixin_30312563的博客 599

mysql+nest+嵌套事务_关于Spring4+Hibernate4架构升级-整合的细节处理-由nested transactions not supported错误解决引申到事务嵌套问题处理...

本着系统稳定的原则,选择了 Spring5 和 Hibernate5版本的第一级版本Spring4+Hibernate4做开发由于此处错误处理,毁三观,耽误了比较长的时间,给自己了一个深刻的教训。颠覆了自己解决问题的期望和方式,很有效果,借以成文,以瞻后效。架构升级之后,问题接二连三而来,犹如打怪升级。当百度第一页的关联问题无法解决的时候,对着堆栈看程序的错误执行流程是最有效的。DEBUG模式下,...

weixin_42530536的博客 315

关于Spring4+Hibernate4架构升级-整合的细节处理-由nested transactions not supported错误解决引申到事务嵌套问题处理...

关于Spring4+Hibernate4架构升级-整合的细节处理-由nested transactions not supported错误解决引申到事务嵌套问题处理 本着系统稳定的原则,选择了 Spring5 和 Hibernate5版本的第一级版本Spring4+Hibernate4做开发 ...

429

Spring1.4——AOP和AOP的事务处理的实现

Javaweb框架学习文章索引点这里 AOP介绍: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分...

smallhc的博客 1939

Spring Data JPA系列4——Spring声明式事务处理与多数据源支持

在大部分涉及到数据库操作的项目里面,事务控制、事务处理都是一个无法回避的问题。那事务使用中的一些问题你都了解么?本篇我们一起探讨下。

是Vzn呀 601

Spring 随笔 transactional 4-事务创建(对存在的事务做处理,但不一定会开启)

Spring 随笔 transactional 4-事务创建(对存在的事务做处理,但不一定会开启)

hyoka的博客 332
上一篇: 2、Spring核心技术-Resource
下一篇: Sturts2 传递一个参数问题
SmarkMeng
博客等级 码龄16年 16粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值