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)相关推荐

  1. springboot事物注解不生效_springboot事务不生效的几种解决方案

    springboot事务不生效的几种解决方案 最近在业务中遇到了很奇怪的场景,在加上 @Transactional注解后,插入2条数据,如果第二条出异常了,第一条不会回滚,排查了很久,上网也找资料看了 ...

  2. springboot使用logback日志,部署到tomcat不生效问题解决

    springboot使用logback日志,部署到tomcat不生效问题解决 参考文章: (1)springboot使用logback日志,部署到tomcat不生效问题解决 (2)https://ww ...

  3. @Transactional事务生效条件与样例

    @Transactional事务生效条件 @Transactional注释的方法,不能是private修饰 @Transactional注释的方法,必须是有接口的方法实现(通用的Spring面向接口编 ...

  4. SpringBoot 异常回滚 事务的使用___Springboot @Transactional 事务不回滚

    Springboot中事务的使用: 1.启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的). 2.在使用事务的public(只有public支持事 ...

  5. Spring事务不生效的原因

    1.概述 事务在后端开发中无处不在,是数据一致性的最基本保证.在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度.因此我们在使 ...

  6. Java的@Transactional事务回滚

    @Transactional 基本原理概述 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@ ...

  7. @Transactional事务的使用和注意事项及其属性

    事务管理 提示 @Transactional注解只能应用到public可见度的方法上,可以被应用于接口定义和接口方法,方法会覆盖类上面声明的事务. 示例: 例如用户新增需要插入用户表.用户与岗位关联表 ...

  8. spring同类调用事务不生效-原因及三种解决方式

    spring提供的声明式事务注解@Transactional,极大的方便了开发者管理事务,无需手动编写开启.提交.回滚事务的代码. 但是也带来了一些隐患,如果注解使用不当,可能导致事务不生效,最终导致 ...

  9. java事务不生效场景_讲一下,我最近帮忙面试的几个“高级”JAVA,真的心累

    最近看了很多简历,很多候选人年限不小,但是想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见. 在沟通中发现,由于年限不小,他们的定位基本都是" ...

最新文章

  1. 关于make *.img时没有权限的问题
  2. 《深度学习》课程视频(含30份资料)
  3. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述
  4. HDU1002 大数相加
  5. 25LINQ拾遗及实例
  6. SpringCloud config 配置中心介绍与基本配置使用
  7. DotNetBar 6.2
  8. html5 drawimage 不显示,javascript – 来自视频的HTML5 Canvas drawImage在第一次绘制时不显示...
  9. laravel validate
  10. 转载:小心别让圆角成了你列表的帧数杀手
  11. 计算机科学与技术专业要选修的课程,计算机科学与技术专业课程探讨
  12. 暗影精灵4 i5-8300H 核显驱动完美触控板声音亮度调节电池电量显示黑苹果EFI引导
  13. 红蓝对抗--蓝军套路之利用系统工具进行文件传输
  14. 【神经网络架构】Pyramid Convolution(金字塔卷积模块)论文笔记
  15. python 爬取http://www.weather.com.cn/中国主要城市周边城市的天气
  16. 猪悟能淘宝店商品下载专家 v1.2
  17. wstmall wstmart wstshop区别
  18. 企业大数据价值最大化的关键因素——内存多维数据库
  19. 使用AlexNet训练自己的数据集
  20. Chalk-控制台输出着色Nodejs库

热门文章

  1. 微型计算机十号功能,青岛理工大学练习题微机原理(10页)-原创力文档
  2. android 菜单 功能键,Android交互体验必知:功能按键事件
  3. nodejs核心模块fs删除文件_用 NodeJS 重命名系统文件
  4. mysql和ORTHOMCL_Orthomcl的详细使用
  5. 冯乐乐 unity_Unity常用矩阵运算的推导补遗——切线空间
  6. ajax 直接向后台发送请求,通过ajax异步向后端发送请求,响应请求向前端传送json格式数据的实现思路...
  7. 服务器故障英文邮件,服务器一般故障排除(国外英文资料).doc
  8. php游戏怎么设置fms,[FMS]FMS使用需要注意的几种问题总结说明
  9. linux vps 运行exe文件夹,linux 64位下安装wine1.6 Windows模拟器(用来运行.exe文件) 编译安装32位wine...
  10. 没有bug队——加贝——Python 练习实例 27,28