Spring事务管理方法步骤解析
作者:幸福的小耗子 发布时间:2021-12-15 20:09:04
1、Spring的事务管理主要包括3个接口
TransactionDefinition:封装事务的隔离级别,超时时间,是否为只读事务和事务的传播规则等事务属性,可通过XML配置具体信息。
PlatformTransactionManager:根据TransactionDefinition提供的事务属性配置信息,创建事务。
TransactionStatus:封装了事务的具体运行状态。比如,是否是新开启事务,是否已经提交事务,设置当前事务为rollback-only等。
2、Spring的事务管理:
1、PlatformTransactionManager:接口统一,抽取处理事务操作相关的方法;
(1):TransactionStatus getTransaction(TransactionDefinition definition): 根据事务定义信息从事务环境中返回一个已存在的事务,或者创建一个新的事务,并用TransactionStatus描述该事务的状态。
(2):void commit(TransactionStatus status): 根据事务的状态提交事务,如果事务状态已经标识为rollback-only,该方法执行回滚事务的操作。
(3):void rollback(TransactionStatus status): 将事务回滚,当commit方法抛出异常时,rollback会被隐式调用
2、在使用spring管理事务的时候,首先得告诉spring使用哪一个事务管理器;
3、常用的事务管理器:
DataSourceTransactionManager:使用JDBC,MyBatis的事务管理器;
HibernateTransactionManager:使用Hibernate的事务管理器;
3、步骤
第一步:配置Spring的事务管理器(需要用的dataSource)
第二步:配置事务
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<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>
<bean id="service" class="com.test.tx.service.impl.AccountServiceImpl">
<property name="accountDao" ref="accountDao"/>
</bean>
<bean id="accountDao" class="com.test.tx.dao.impl.AccountDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--事务管理器-->
<bean id="manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置事务-->
<aop:config>
<!--配置切入点,这里写自己想要使用Spring事务管理的类或接口,在上篇博客中有切入点配置方法-->
<aop:pointcut id="pointcut" expression="execution( * com.test.tx.service.IAccountService.*(..))"/>
<!--配置切面-->
<aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>
</aop:config>
<!--事务增强器-->
<tx:advice id="advice" transaction-manager="manager">
<tx:attributes>
<!--read-only可以将查询的方法设为只读事务-->
<tx:method name="*" read-only="false"/>
</tx:attributes>
</tx:advice>
</beans>
第三步:进行事务的测试
4、事务的注解配置方式
第一步:加载驱动
<!--事务的注解驱动,注解解析器需要关联事务管理器-->
<tx:annotation-driven transaction-manager="manager"/>
第二步:在实现类上添加注解@Transactional注解中相应的属性可以配置事务控制的相关细节(隔离级别/传播规则/是否只读等)
类中的方法也可以添加@Transactional注解,同样可以对方法进行细节配置,方法中的配置信息会覆盖类中的同名配置。
来源:https://www.cnblogs.com/xfdhh/p/11488444.html


猜你喜欢
- 其实说实话,没有多大的可比较性,它们是完全不同的两个东西,它们的抽象不在同一个层级上。但是为了让大家更好的理解,还是做一个比较吧,毕竟它们都
- 概述线程池的好处和使用本篇文章就不赘叙了,不了解的可以参考下面两篇文章:一文全貌了解线程池的正确使用姿势学习线程池原理从手写一个线程池开始那
- 引入假定我们有两个项目:Cup 和 Water,其中 Cup 表示主项目,而 Water 表示子模块项目。其中 Cup 的远程仓库地址为 g
- 1.在外部开启activity时需要新开一个task,从service里开启activity时出现了这个异常。W/System.err: a
- Intellij IDEA 最突出的功能自然是调试(Debug),可以对Java代码,JavaScript,JQuery,Ajax等技术进行
- 今天小编来手写一个自定义圆形进度条:先看效果:首先我们在attrs属性文件中增加几个自定义属性<?xml version="
- 一、代码实现创建窗口首先创建一个游戏窗体类GameFrame,继承至JFrame,用来显示在屏幕上(window的对象),每个游戏都有一个窗
- 当jvm虚拟机被关闭的时候,可能我们需要做一些处理,比如对连接的关闭,或者对一些必要信息的存储等等操作,这里就可以借助于虚拟机提供的钩子函数
- 如下所示:public static void main(String[] args) throws IOException {  
- Android Studio是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA。它类似于Eclipse ADT,And
- C#连接本地.mdf文件:项目中右键点击,新增——数据——基于服务的数据库,项目下直接生成.mdf数据库文件,后台(数据库的写入用参数传递)
- 笔者发现在很多应用中,都有自动获取验证码的功能:点击获取验证码按钮,收到短信,当前应用不需要退出程序就可以获取到短信中的验证码,并自动填充。
- 配置Servlet的方法有俩种,分别是传统web.xml文档中部署servlet和注解方式部署servlet,下面就先一起来学习 * 解方式部
- 本人所使用的开发环境是VS2008,开发的系统所在移动终端版本为windows mobile 5.0。由于需要进行身份的验证,需要获取移动终
- import java.io.ByteArrayOutputStream;import java.io.InputStream;//从输入流
- Java提示缺少返回值语句怎么办?这里我们给大家提供具体的解决方法。首先,以下面的程序为例,会看到在控制台有:错误:缺少返回语句的提示。找到
- 这篇文章主要介绍了Java List分页功能实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 目录前言:一、IronPython二、Python打包exe调用三、Python提供WebApi接口(推荐)总结:前言:在平时工作中,需求有
- 字符串采用unicode编码的方式时,计算字符串长度的方法找出UNICODE编码中的汉字的代表的范围“\u4E00” 到“\u9FBB”之间
- 打印Java程序的线程栈信息jstack可以得知当前线程的运行情况安装jstack等命令集,jstack是开发版本jdk的一部分,不是开发版