Spring配置xml自定义事务管理器
上一篇博客讲解了Spring配置xml事务,使用的是Spring框架提供的事务管理器。
在本篇博文当中,来讲解一下使用自定义的事务管理方式。
把上一篇博文当中的这个配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
修改为如下的配置:
<bean id="transactionManager" class="com.cat.aop.TransactionAdvice">
<property name="ds" ref="dataSource"/>
</bean>
这部分代码注销:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 事务属性 -->
<tx:attributes>
<tx:method name="*"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="list*" read-only="true"/>
<!--增删改 -->
<tx:method name="insert*" timeout="5000" rollback-for="java.lang.Exception"/>
<tx:method name="add*" timeout="5000"/>
<tx:method name="update*" timeout="5000"/>
<tx:method name="delete*" timeout="5000"/>
</tx:attributes>
</tx:advice>
因为使用aop进行拦截,就不在需要上面的代码。
aop:config的配置修改为:
<aop:config>
<!-- 正确配置方式 -->
<aop:pointcut id="pt" expression="execution(* com.cat.service.impl.CatServiceImpl.*(..))"/>
<aop:aspect ref="transactionManager">
<aop:around method="tranAround" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
添加一个自定义事务管理TransactionAdvice类的代码如下
public class TransactionAdvice {
private DataSource ds;
public void setDs(DataSource ds) {
this.ds = ds;
}
public TransactionAdvice() {
}
public TransactionAdvice(DataSource ds) {
this.ds = ds;
}
public Object tranAround(ProceedingJoinPoint pj) throws Throwable {
//开启事务 (
//事务管理器
DataSourceTransactionManager ptm = new DataSourceTransactionManager();
//事务管理器中,需要注入 dataSource
ptm.setDataSource(ds);
//声明事务
TransactionDefinition td = new DefaultTransactionDefinition();
//事务状态
TransactionStatus ts =ptm.getTransaction(td);
Object obj=pj.proceed();
ptm.commit(ts);
return obj;
}
}
注意这个类中ds需要和
<bean id="transactionManager" class="com.cat.aop.TransactionAdvice">
<property name="ds" ref="dataSource"/>
</bean>
这个位置的一致。
执行前的数据为:

运行后的结果为

再次查看数据库,刷新后的结果如下

事务正确回滚,达到目的。
如果把10 / 0去掉,再次执行。

查看结果,执行成功,第一条数据名称修改成功,第二条数据物理删除成功!

至此自定义事务管理的整个流程全部打通。
真实的开发中,还是建议配置为Spring自带的事务管理器,一般很少出现自己去添加
自定义事务管理器的情况。各位小伙伴有其他更好建议的,欢迎留言。
Spring配置xml自定义事务管理器的更多相关文章
- spring配置多个事务管理器
<tx:annotation-driven/> <bean id="transactionManager1" class="org.springfram ...
- Spring3.0配置多个事务管理器(即操作多个数据源)的方法
大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义 ...
- spring 配置事务管理器
在Spring中数据库事务是通过PlatformTransactionManager进行管理的,jdbcTemplate是不能支持事务的,而能够支持事务的是org.springframework.tr ...
- spring的annotation-driven配置事务管理器详解
http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html ——————————————————————————————————————————————— ...
- Spring事务管理器的应对
Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋.像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不太方便:而iBatis则通过模板化技术让你方便地控制SQ ...
- 跟我学Spring3(9.2):Spring的事务之事务管理器
原文出处: 张开涛9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManage ...
- Spring jdbctemplate和事务管理器 全注解配置 不使用xml
/** * spring的配置类,相当于bean.xml */@Configuration//@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans ...
- 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
问题描述: Error occured processing XML 'org/aopalliance/intercept/MethodInterceptor'. See Error Log for ...
- spring事务管理器的源码和理解
原文出处: xieyu_zy 以前说了大多的原理,今天来说下spring的事务管理器的实现过程,顺带源码干货带上. 其实这个文章唯一的就是带着看看代码,但是前提你要懂得动态代理以及字节码增强方面的知识 ...
- Spring事务管理器
1.创建实体和接口 public class Bank { private Integer id; private String name; private String manay; public ...
随机推荐
- 大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求
大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求 一个面向多模式GPT-4级别能力构建的助手.它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解.LL ...
- C/C++ 反汇编:函数与结构体
反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ...
- Flask 实现简单的图片上传
通过使用Flask框架实现一个简单的图片上传工具,当用户提交图片后会自动将图片保存到upload目录下,代码如下 import os from flask import Flask, request ...
- C++ Boost 函数与回调应用
#include <iostream> #include <string> #include <boost\bind.hpp> using namespace st ...
- C/C++ Qt QThread 线程组件应用
QThread库是QT中提供的跨平台多线程实现方案,使用时需要继承QThread这个基类,并重写实现内部的Run方法,由于该库是基本库,默认依赖于QtCore.dll这个基础模块,在使用时无需引入其他 ...
- 【技能篇】解决vs编译器scanf等函数不安全问题【手把手操作-一分钟解决】
[技能篇]解决Vs编译器scanf等函数不安全问题 文章目录 说在前面 博主给大家的福利 解决方案 解决过程 尾声 说在前面 大家刚开始学习编程的时候,使用vs编译器.使用scanf等函数的时候遇到的 ...
- Nexus系列:简介和安装(Windows、Linux)以及反向代理Nexus
目录 简介 安装 Windows Linux Nexus相关命令 Nginx反向代理Nexus 简介 Sonatype Nexus是一个Maven仓库管理器,可以节省网络带宽并加速项目搭建的进程.它可 ...
- 除了mysql 和 sql server, 你还有另外一种选择 postgreSQL
数据库的重要性,不用多说.数据库的名字,大家应该也知道很多.就国内来说,使用者最多的应该是mysql 和sql server,大企业用ORACLE的也不在少数. 就我个人而言,在使用.NET的时候,基 ...
- 蓝鲸单机离线部署:app_mgr组件安装失败解决
之前在腾讯蓝鲸智云-单机离线部署测试中,遇到了几个安装问题,本文记录下3.2 app_mgr组件安装失败 的解决过程,因为这个问题卡了很久(可能也是因为笔者对python相关知识和蓝鲸产品不够熟悉), ...
- 20.4 延迟加载DLL--《Windows核心编程》
延迟加载的 DLL 是个隐含链接的 DLL,它实际上要等到你的代码试图引用 DLL 中包含的一个符号时才进行加载. DLL延迟加载技术的原理,就是从导入表中去掉某dll这一项,等到正式调用DLL的时候 ...