当事务Transactional遇见异步线程出现的坑及解决

 更新时间:2023年12月02日 08:40:58   作者:三省同学  
这篇文章主要介绍了当事务Transactional遇见异步线程出现的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题

开发小伙伴遇到线上环境消息推送不成功,排查日志发现推送是id为null

代码示例

@Transactional(rollbackFor = Exception.class)
public void register(UserDTO dto) {
    User user = BeanCopyUtils.copyBean(dto, User.class);
    insert(user);
    //注册成功消息推送
    executor.execute(() -> pushRegisterMessage(user));
}

通过代码分析,按照程序代码执行,插入用户能产生数据,但推送id为空,就是事务执行完成是,多线程已经执行。

解决方案

1.多线程延时执行,等事务执行完成。

2.去掉事务

拓展

@Transactional注解属性就是来控制事务属性的。通过这些属性来生成事务。

@Transactional注解在外部调用的函数上才有效果,内部调用的函数添加无效。这是由AOP的特性决定的。

如果你在protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用

@Transactional的函数调用有@Transactional的函数的时候,进入第二个函数的时候是新的事务,还是沿用之前的事务。

稍不注意就会抛UnexpectedRollbackException异常。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Hikari连接池使用SpringBoot配置JMX监控实现

    Hikari连接池使用SpringBoot配置JMX监控实现

    Hikari是Spring Boot默认的数据库连接池。区别于C3P0直接通过连接池对象获取各项状态指标,Hikari需要通过JMX来获取。本文就详细的来介绍一下,感兴趣的可以了解一下
    2021-07-07
  • Java分页工具类及其使用(示例分享)

    Java分页工具类及其使用(示例分享)

    本篇文章主要分享了Java分页工具类及其使用的示例代码,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 详解Mybatis的分页插件

    详解Mybatis的分页插件

    这篇文章主要介绍了详解Mybatis的分页插件,在 Mybatis中,如何对数据进行分页是一个非常常见的问题,现在,我们可以通过使用 Mybatis 的分页插件来实现对数据的分页,需要的朋友可以参考下
    2023-05-05
  • 浅谈Java中BigDecimal类的简单应用

    浅谈Java中BigDecimal类的简单应用

    这篇文章主要介绍了浅谈Java中BigDecimal类的简单应用,BigDecimal是由任意精度的整数非标度值和32位的整数标度组成,如果为零或正数,则标度是小数点后的位数,如果为负数,则将该数的非标度值乘以 10的负scale次幂,需要的朋友可以参考下
    2023-07-07
  • Java初学者问题图解(动力节点Java学院整理)

    Java初学者问题图解(动力节点Java学院整理)

    本文通过图文并茂的形式给大家介绍了java初学者问题,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-04-04
  • springboot时间格式化的五种方法总结(解决后端传给前端的时间显示不一致)

    springboot时间格式化的五种方法总结(解决后端传给前端的时间显示不一致)

    这篇文章主要给大家介绍了关于springboot时间格式化的五种方法,文中介绍的方法解决了后端传给前端的时间显示不一致,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • SpringBoot生产环境打包如何去除无用依赖

    SpringBoot生产环境打包如何去除无用依赖

    这篇文章主要介绍了SpringBoot生产环境打包如何去除无用依赖问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • IDEA使用proxy ai集合deepseek教程

    IDEA使用proxy ai集合deepseek教程

    用户更新IDEA至2024.3,安装配置proxyai插件,通过硅基流动平台注册获取免费API配额,并设置模型参数,最终完成工具配置使用
    2025-07-07
  • SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分库分表

    SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分库分表

    本文主要介绍了SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分库分表,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java生成CSV文件实例详解

    Java生成CSV文件实例详解

    这篇文章主要介绍了Java生成CSV文件的方法,很实用的功能,需要的朋友可以参考下
    2014-07-07

最新评论