spring事务注解失效问题
问题描述:
由于工作需要,需要在spring中配置两个数据源,有一天突然发现@Transactional注解失效
环境框架:
springmvc+spring+spring jdbcTemplate
数据库:
Oracle数据库
解决方法:
百度获得三种可能原因及相应解决方案:
第一种
springmvc包扫描覆盖spring包扫描
<!– 自动扫描的包名 –>
<context:component-scan base-package=“com.yxyj” >
</context:component-scan>
spring容器优先加载由ServletContextListener(对应applicationContext.xml)产生的父容器,而SpringMVC(对应mvc_dispatcher_servlet.xml)产生的是子容器。子容器Controller进行扫描装配时装配的@Service注解的实例是没有经过事务加强处理,即没有事务处理能力的Service,而父容器进行初始化的Service是保证事务的增强处理能力的。如果不在子容器中将Service exclude掉,此时得到的将是原样的无事务处理能力的Service。
springmvc的配置文件里包扫描范围太大,应该将service排除在外
<context:component-scan base-package=“com.will” >
<context:exclude-filter type=“annotation” expression=“org.springframework.stereotype.Service” />
</context:component-scan>
第二种
使用的mysql数据库,数据库引擎使用的不是InnoDB,只要切换成InnoDB就可以了
alter table tablename type=InnoDb
第三种
注解加的方法权限修饰符不是public,@Transational失效,修改修饰符为public
结果是,我的注解扫描范围只有controller层,所以第一种方案失败,数据库是Oracle数据库,第二种解决方案失败,方法权限修饰符就是public,第三种方案失败......
接下来,继续查找原因,然后了解到原来事务是和数据源绑定的,如果不给事务管理器qualifer属性,@Transactional默认会与第一个事务管理器绑定,结果我用的是第二个数据源,导致Transactional失效
解决方案:
配置事务管理器时添加value区分字段
<bean id="transactionManager02"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource02" />
<qualifier value="ynw"></qualifier>
</bean>
java代码中添加value
@Transactional(value = "ynw")
public HashMap<String, Object> addAppointMent(Map map) {}
这样事务就可以使用了
spring事务注解失效问题的更多相关文章
- Spring aop注解失效
问题 在spring 中使用 @Transactional . @Cacheable 或 自定义 AOP 注解时,对象内部方法中调用该对象的其他使用aop机制的方法会失效. @Transactiona ...
- 关于spring事务注解实战
1.概述 spring的事务注解@Transaction 相信很多人都用过,而@Transaction 默认配置适合80%的配置. 本篇文章不是对spring注解事务做详细介绍,而是解决一些实际场景下 ...
- Spring事务注解分析
1.使用spring事务注解 2.手写事务注解 1).sql执行器 2).事务注解定义 3).AOP实现事务具体实现(同一个线程中使用同一个连接) 4).应用使用注解前 5).应用使用注解后
- Spring事务注解@Transactional失效的问题
在项目中发现事务失效,使用@Transactional注解标注的Service业务层实现类方法全部不能回滚事务了,最终发现使用因为Spring与shiro进行整合之后导致的问题,将所有的Service ...
- 这一次搞懂Spring事务注解的解析
前言 事务我们都知道是什么,而Spring事务就是在数据库之上利用AOP提供声明式事务和编程式事务帮助我们简化开发,解耦业务逻辑和系统逻辑.但是Spring事务原理是怎样?事务在方法间是如何传播的?为 ...
- 这12种场景Spring事务会失效!
前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了.在某些业务场景下,如果一个请求中,需要同时写入多张表的数据.为了保证操作的原子性 (要么同时成功,要么同时失败),避免数据 ...
- Spring事务管理者与Spring事务注解--声明式事务
1.在Spring的applicationContext.xml中配置事务管理者 PS:具体的说明请看代码中的注释 Xml代码: <!-- 声明式事务管理的配置 --> <!-- 添 ...
- spring事务注解
@Transactional只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能. Spring使用声明式事务处理,默认 ...
- 手动实现自己的spring事务注解
spring事务是基于同一个数据连接来实现的,认识到这一点是spring事务的关键,spring事务的关键点便在于在事务中不管执行几次db操作,始终使用的是同一个数据库连接.通过查看源码,我们可以看到 ...
随机推荐
- day72 Ajax 第一天
第一个示例:(i1+i2 ) 前端数据 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- sql语句应考虑哪些安全性?
(1)少使用root账户,应该为不同的动作分配不同的账户: (2)sql执行出错后,不能把数据库中显示的出错信息,直接展示给用户.防止泄露服务器和数据库相关信息: (3)防止sql注入,对特殊字符进行 ...
- php错误控制运算符@
PHP支持一个错误控制运算符:@.当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉. 如果用set_error_handle()设定了自定义的错误处理函数,仍然会被调用,但是 ...
- ZZNU 2055(基姆拉尔森计算公式)
题目链接 题意: 比如今天是2017年8月16日,星期三.下一个也是星期三的8月16日发生在2023年. 现在是日期是yyyy-mm-dd,我们希望你求出薛定谔会跳跃到那一年. 题解: emmmm.. ...
- maven配置时mvn不是内部或外部问题解决
参考这里
- 算法逆向6——RSA识别
本文原创作者:i春秋作家——icq5f7a075d 1. 算法介绍 RSA算法是一种用数论构造的.基于大合数因子分解困难性的公开密钥密码.由于RSA密码既可用于加密,又可用于数字签名,安全.易懂,因此 ...
- 重读源码,见证HashMap以及它的朋友们的骚操作
一.Getting Start Again and again,until you master it.早在接触java.util包的时候,我们都会去阅读ArrayList,甚至也会去阅读HashMa ...
- NOIP2017滚粗记【上】
Day0: NOIP前停课训练的最后一天,上午打了一场三题都见过的比赛,一窝人AK. 下午一群人在机房缓慢氧化,到了晚上因为比赛在我们学校打,所以所有的机房都断网了(百思不得其解为什么两个竞赛室也被断 ...
- Window - 浏览器对象模型
浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model (BOM))尚无正式标准. 由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因 ...
- eclipse web开发插件安装
eclipse官方网站上下载的标准版Eclipse是没有web开发环境的,为了能够进行web开发,需要安装一些插件.web开发需要的插件有 1 EMF: Downloads | Project hom ...