@Transaction 无效
上班的时候碰到这个问题,看了一些博客写的,都试了一遍解决方案,发现结果还是不行,
最后突然发现我的配置顺序和网上的有些许不同,就改了下,发现成功了,特此打桩纪念一下。
一、先说一下基本用法:
1. @Transactional 注解可以标注在类和(Public)方法上,也可以标注在定义的接口和接口方法上。
不过,Spring建议我们将@Transaction注解在实现类上。
因为注解不能被继承,所以业务接口中标注的@Transactional注解不会被业务实现类继承。所以可能会出现不启动事务的情况。
2. @Transactional 注解只能应用到 public 可见度的方法上。
如果应用在protected、private或者 package可见度的方法上,也不会报错,不过事务设置不会起作用。
3. Spring默认情况下会对运行期例外(RuntimeException)进行事务回滚。这个例外是unchecked,如果遇到checked意外就不回滚。
如何改变默认规则:
1) 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2) 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
3) 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw RuntimeException}。
二、解决@Transaction事务不会滚
1. 检查你方法是不是public的。
2. 你的异常类型是不是unchecked异常。
3. 数据库引擎要支持事务,如果是mysql,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务是不起作用的。
4. 是否开启了对注解的解析
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
5. spring是否扫描到你这个包,如下是扫描到org.test下面的包
<context:component-scan base-package="com.iyuetest.web" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
6. 以上方法都试遍了还是不行,看了一篇文章说spring加载顺序可能有关,然后我将自己的配置位置调换了一下,就可以用了。
原本:第一段和第三段是放在spring-db.xml 文件,第二段(需要扫描带注解类的包的配置)在spring-servlet.xml 里
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <!-- 需要扫描带注解类的包 -->
<context:component-scan base-package="com.iyuetest.web" >
<!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan> <!-- 事务控制 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
参考:http://blog.csdn.net/gdfgdfk/article/details/50329859
http://blog.csdn.net/qiaoshuai0920/article/details/52125517
http://www.cnblogs.com/wuxiaofeng/p/6819209.html
@Transaction 无效的更多相关文章
- 比特币运行原理[z]
https://baijiahao.baidu.com/s?id=1581755535769652543&wfr=spider&for=pc 这篇文章主要讲解比特币是什么?它的运行原理 ...
- Master Note: Troubleshooting ORA-1548 error (Doc ID 1577988.1)
APPLIES TO: Oracle Database Cloud Schema Service - Version N/A and laterOracle Database Exadata Clou ...
- 从报错“无效操作,连接被关闭”探究Transaction的Timeout超时机制
1.报错如下:Invalid Operation the connection is closed,无效操作,连接被关闭.这个错误是并不是每次都报,只有在复杂操作.大事务的情况下才偶然报出来. sta ...
- [spring transaction],service实现类中非事务方法直接调用自身事务方法导致事务无效的原因
首先,准备service接口,两个 public interface AccountService { public void createAccount(Account account, int t ...
- SQL Server 2008 中收缩数据库(DUMP,TRANSACTION,TRAN,无效,语法错误)
从SQL SERVER 2008 开始,我们已经不能再用以前 DUMP TRAN 数据库名 WITH NO_LOG 的这种方式来收缩数据库,但是,可以用另外一种替代的方法,SQL语句如下: ALTER ...
- InnoDB:Lock & Transaction
InnoDB 是一个支持事务的Engine,要保证事务ACID,必然会用到Lock.就像在Java编程一下,要保证数据的线程安全性,必然会用到Lock.了解Lock,Transaction可以帮助sq ...
- Verify an App Store Transaction Receipt 【苹果服务端 验证一个应用程序商店交易收据有效性】
转自:http://blog.csdn.net/saindy5828/article/details/6414014 1. 从Transaction 的TransactionReceipt属性中得到接 ...
- Hyperledger Fabric Transaction Flow——事务处理流程
Transaction Flow 本文概述了在标准资产交换过程中发生的事务机制.这个场景包括两个客户,A和B,他们在购买和销售萝卜(产品).他们每个人在网络上都有一个peer,通过这个网络,他们发送自 ...
- HyperLedger Fabric 1.0的Transaction处理流程
如果把区块链比作一个只能读写,不能删改的分布式数据库的话,那么事务和查询就是对这个数据库进行的最重要的操作.以比特币来说,我们通过钱包或者Blockchain.info进行区块链的查询操作,而转账行为 ...
随机推荐
- Burn Down Chart(2018.6.4~2018.6.10)
Burn Down Chart (2018.6.4~2018.6.10) 娄雨禛[前端部分] 曾子轩[后端部分+燃尽图] 前端 1. 娄雨禛+李鑫 1)在总工程中完成跳转,实现图片显示,并发布到Git ...
- SQL Server 中4个系统数据库,Master、Model、Msdb、Tempdb。
(1)Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息.这些系统信息包括所有的登录信息.系统设置信息.SQL Server的初始化信息和其他系 ...
- Angular——基本使用
基本介绍 1.AngularJS是一个框架(诸多类库的集合)以数据和逻辑做为驱动(核心). 2.AngularJS有着诸多特性,最为核心的是:模块化.双向数据绑定.语义化标签.依赖注入等. 模块化 使 ...
- [Windows Server 2003] 网页Gzip压缩
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:启用网站GZI ...
- dos命令在vba中应用
正常情况下想要遍历文件夹和子文件夹,可以采用递归的方式 Sub ListFilesTest() With Application.FileDialog(msoFileDialogFolderPicke ...
- 微信小程序animation
wxml <view class="background" animation="{{rotateData}}"> </view>< ...
- linux常用命令--ubuntu
linux 操作系统 一.linux 操作系统概述 二.安装linux系统 三.linux系统环境 ubuntu,默认有6个命令交互通道和一个图形界面交互通道,默认进入到的是图形界面通道 命令交互模式 ...
- mysql在windows上安装
一.在window上安装mysql MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行.但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的.很多人下了zip格式的解压发现没有s ...
- DP——最长上升子序列(LIS)
DP——最长上升子序列(LIS) 基本定义: 一个序列中最长的单调递增的子序列,字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的部分字符,但不可改变其前后顺序. LIS ...
- 学习MPI并行编程记录
简单的MPI程序示例 首先,我们来看一个简单的MPI程序实例.如同我们学习各种语言的第一个程序一样,对于MPI的第一个程序同样是"Hello Word". /* Case 1 he ...