@Transactional事务不生效问题解决(springboot)
springboot事务不生效的几种解决方案
最近在业务中遇到了很奇怪的场景,在加上 @Transactional注解后,插入2条数据,如果第二条出异常了,第一条不会回滚,排查了很久,上网也找资料看了很久,问题得以解决,总结了事务不生效的几点可能的原因:
mysql的MyISAM引擎不支持回滚,如果需要自动回滚事务,需要将mysql的引擎设置成InnoDB;
在业务中抛出异常时,本应该被事务管理器捕获的异常,被手动catch处理了,或者事务结果未满足具体业务需求的,如果需要手动catch异常做业务处理,需要在catch里手动回滚事务TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(),或者在catch中主动抛出异常throw new RuntimeException();.
默认的spring事务只会捕获RuntimeException,如果是非运行时异常也需要进行事务回滚的话,可以在@Transactional注解中加上rollbackfor = Exception.class属性;
项目中没有配置事务管理器(大坑!我遇到的就是这个),需要在配置类或者配置文件中配置,以本人的配置类为例,因为项目是多数据源的,所以要区别配置不同数据源的事务管理器.
数据源一:
@Bean(name = "detDataSource")public DataSource getDataSource() {return createDataSource();}@Bean(name = "detTransactionManager")public PlatformTransactionManager txManager(@Qualifier("detDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
数据源二:
@Primary@Bean(name = "shardDataSource")public DataSource getDataSource() {return buildDataSource();}@Bean(name = "shardTransactionManager")public PlatformTransactionManager txManager(@Qualifier("shardDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
可以看到,两个事务管理器配置了不同的beanName,接下来只需要 在需要事务控制的位置加上该事务管理器的name就可以完美解决啦!
@Override@Transactional(value = "detTransactionManager",rollbackFor = Exception.class)public int updateOrInsert(BaseRequest<BankTemplateDto> param) {
@Transactional事务不生效问题解决(springboot)相关推荐
- springboot事物注解不生效_springboot事务不生效的几种解决方案
springboot事务不生效的几种解决方案 最近在业务中遇到了很奇怪的场景,在加上 @Transactional注解后,插入2条数据,如果第二条出异常了,第一条不会回滚,排查了很久,上网也找资料看了 ...
- springboot使用logback日志,部署到tomcat不生效问题解决
springboot使用logback日志,部署到tomcat不生效问题解决 参考文章: (1)springboot使用logback日志,部署到tomcat不生效问题解决 (2)https://ww ...
- @Transactional事务生效条件与样例
@Transactional事务生效条件 @Transactional注释的方法,不能是private修饰 @Transactional注释的方法,必须是有接口的方法实现(通用的Spring面向接口编 ...
- SpringBoot 异常回滚 事务的使用___Springboot @Transactional 事务不回滚
Springboot中事务的使用: 1.启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的). 2.在使用事务的public(只有public支持事 ...
- Spring事务不生效的原因
1.概述 事务在后端开发中无处不在,是数据一致性的最基本保证.在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度.因此我们在使 ...
- Java的@Transactional事务回滚
@Transactional 基本原理概述 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@ ...
- @Transactional事务的使用和注意事项及其属性
事务管理 提示 @Transactional注解只能应用到public可见度的方法上,可以被应用于接口定义和接口方法,方法会覆盖类上面声明的事务. 示例: 例如用户新增需要插入用户表.用户与岗位关联表 ...
- spring同类调用事务不生效-原因及三种解决方式
spring提供的声明式事务注解@Transactional,极大的方便了开发者管理事务,无需手动编写开启.提交.回滚事务的代码. 但是也带来了一些隐患,如果注解使用不当,可能导致事务不生效,最终导致 ...
- java事务不生效场景_讲一下,我最近帮忙面试的几个“高级”JAVA,真的心累
最近看了很多简历,很多候选人年限不小,但是想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见. 在沟通中发现,由于年限不小,他们的定位基本都是" ...
最新文章
- 关于make *.img时没有权限的问题
- 《深度学习》课程视频(含30份资料)
- 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述
- HDU1002 大数相加
- 25LINQ拾遗及实例
- SpringCloud config 配置中心介绍与基本配置使用
- DotNetBar 6.2
- html5 drawimage 不显示,javascript – 来自视频的HTML5 Canvas drawImage在第一次绘制时不显示...
- laravel validate
- 转载:小心别让圆角成了你列表的帧数杀手
- 计算机科学与技术专业要选修的课程,计算机科学与技术专业课程探讨
- 暗影精灵4 i5-8300H 核显驱动完美触控板声音亮度调节电池电量显示黑苹果EFI引导
- 红蓝对抗--蓝军套路之利用系统工具进行文件传输
- 【神经网络架构】Pyramid Convolution(金字塔卷积模块)论文笔记
- python 爬取http://www.weather.com.cn/中国主要城市周边城市的天气
- 猪悟能淘宝店商品下载专家 v1.2
- wstmall wstmart wstshop区别
- 企业大数据价值最大化的关键因素——内存多维数据库
- 使用AlexNet训练自己的数据集
- Chalk-控制台输出着色Nodejs库
热门文章
- 微型计算机十号功能,青岛理工大学练习题微机原理(10页)-原创力文档
- android 菜单 功能键,Android交互体验必知:功能按键事件
- nodejs核心模块fs删除文件_用 NodeJS 重命名系统文件
- mysql和ORTHOMCL_Orthomcl的详细使用
- 冯乐乐 unity_Unity常用矩阵运算的推导补遗——切线空间
- ajax 直接向后台发送请求,通过ajax异步向后端发送请求,响应请求向前端传送json格式数据的实现思路...
- 服务器故障英文邮件,服务器一般故障排除(国外英文资料).doc
- php游戏怎么设置fms,[FMS]FMS使用需要注意的几种问题总结说明
- linux vps 运行exe文件夹,linux 64位下安装wine1.6 Windows模拟器(用来运行.exe文件) 编译安装32位wine...
- 没有bug队——加贝——Python 练习实例 27,28