当事务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异常。

先赞后看,养成习惯。欢迎收看一个行走的熊猫程序猿,下期再见

关注
文章持续更新,可以微信搜索「 熊猫程序猿a 」第一时间催更
公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49064.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

511遇见电脑PC任意多开绿色软件

电脑端的微信只能单开,为了工作方便需要,我们有时候需要开启多个微信账号,511遇见制作一个微信多开端。 微信vx多开器特点 1.支持自动获取电脑上的微信安装路径 2.支持手动获取微信安装路径 3.支持所有版本的微信多开 4.支持自定义任意多开数…

当互联网码农遇见国企老同学

本文转载自程序员技术 码农张小北和国企职员王志强, 是同一所大学、同一个专业、同一间宿舍, 睡上下铺的兄弟。 毕业那年, 性格沉闷的张小北去了互联网公司, 善于处事的王志强选择了一家国企。 两个不同的选择, 在…

抖音直播带货数据统计,直播带货要复盘哪些数据指标

抖音直播电商数据分析需要围绕“带货”这个核心目标展开,这其中就涉及到“人、货、场”这三个概念,也就是抖音直播的流量、商品和直播间。 这三个概念组合起来,就是抖音直播电商需要关注的核心问题,也是我们数据分析的重点: 1. 不同商品适合在什么类型的直播间推广? 商品在…

带货直播系统,实现直播重要的一步——推流

什么是rtmp? RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议&…

虚拟主播也带货?直播电商的变与不变

5月6日晚,海外虚拟主播vox在B站开启了中国直播首秀。从最终数据来看,直播1.7小时,营收111万人民币,当晚还登上平台热门首位,这样的直播吸金能力,让不少明星都望尘莫及。 更值得关注的是,直播间…

直播带货行业如何入局?先了解一下直播商城源码吧

直播行业的爆火已经持续了多个年头,直到今天,在人们的生活中依然有着举足轻重的地位,它通过多元化的方案为许多行业带来了新的思路,特别是与传统商业所结合的“直播电商”、“直播商城”的卖货新形式,让多方因此而受益…

抖音直播带货数据统计,抖音直播带货复盘必看的4个数据

在每一次抖音直播结束后,都会将这一场数据呈现给我们,而我们要对数据进行分析总结。很多人在分析数据的时候,不知道要分析哪些数据,其实我们在复盘的时候,一定要注意这4个数据,这四个数据可以很全面的反应直…

直播前、直播中、直播后...直播带货技巧大盘点

直播带货已经成为2020年商家营销的一个必要渠道,随着移动互联网发展日益壮大,全国各大行业基本上已经普及了网络化,直播行业已经成为炙手可热的话题。 “万物皆可直播”这是前段时间网上盛传的一句话,是啊,万物皆可直…

直播带货系统,实现直播间人数统计

实现直播带货系统直播间的上下滚动人数计数器: css: .sdvm_num{! font-size: 14px;color:red;display:inline-block;vertical-align:middle;margin-left:8px;} .sdvm_num i{width:70px;height:52px;display:inline-block;background:url(../images/num…

直播带货app源码,实现直播连麦和PK

一、概述 连麦:是指直播带货app源码中,由观众向主播发起连线请求,在主播和该观众之间建立低延迟的通讯链路,而其他观众可以看到“主播连麦观众”的合成音视频内容。PK:是指直播过程中,由主播发起&#xff…

DBS的组成、DBS的全局结构、DBS结构的分类

概述:这在知识体系中都是目录式的知识,把它整理出来,形成图即可。

DB,DBMS,DBS之间的关系

数据库(Database,简称DB)是指:长期储存在计算机内的、有组织的、可共享的大量数据集合。一个应用系统通常包含多个数据库。 数据库管理系统(Database Management System,简称DBMS)是位于用户(应用程序)与操…

DBS小结

《数据库系统原理》主要介绍的是数据库技术的基本原理、方法和应用技术。 它可以使我们能有效地使用现有的数据库管理系统和软件开发工具,掌握数据库结构的设计和数据库应用系统的开发原理。 在这里,将这本书分为概念部分、方法部分和应用技术部分。

实战案例丨GaussDB for DWS如何识别坏味道的SQL

摘要:SQL中的坏味道,你知道吗? SQL语言是关系型数据库(RDB)的标准语言,其作用是将使用者的意图翻译成数据库能够理解的语言来执行。人类之间进行交流时,同样的意思用不同的措辞会产生不同的效果…

GBase 8s 数据库监控(4)

5.Session 的连接情况 通过 Session 的连接信息,可以分析出数据库系统业务的负载情况以及来自哪些客户端的任务较多,并且根据 Session 的空闲情况判断客户端连接池是否存在过多的连接。查询 Session 连接情况的 SQL 语句如下。 SELECT s.sid…

一篇就够了-带你走进DB2分区

目录 先决条件: DB2数据库分区 1、概念描述 2、DPF对数据库性能产生的影响 3、DB2分区与Oracle的比较 4、总结 进入正文: 简介 特性概述 三个互补的 CREATE TABLE 选项 简要对比 互补特性 表设计 表设计的经验法则 设计的例子 再添上 MQ…

GBase8s 数据库实例化

1.切换到数据库用户gbasedbt su - gbasedbt 2.切换到目录/opt/gbase/etc, 执行实例化脚本GBaseInit_gbasedbt.sh: cd /opt/gbase/etc sh GBaseInit_gbasedbt.sh 3.实例名称使用默认值gbaseserver: ENTER THE INSTANCE INFORMATION or PRESS <ENTER> TO ACCEPT THE D…

DB2数据库降低高水位方案

https://www.ibm.com/support/knowledgecenter/zh/SSEPGG_11.1.0/com.ibm.db2.luw.admin.dbobj.doc/doc/c0055399.html如何确认高水位&#xff1a;https://www.cndba.cn/hbhe0316/article/4796 db2pd -db testdb -tablespaces 如上图所示&#xff0c;这些表空间中的UsedPgs如果…

GBASE监控工具简介

统一监控主要包含采集代理、采集中心和监控网站三大部分功能模块&#xff0c;其中每个功能模块又由多个组件组成。 采集代理模块包含 GAgent 组件&#xff0c;需要部署在 GCluster 集群节点上。该模块负责采集集群节点的操作系统、磁盘、内存、 CPU、网络流量、节点运行…

HRTransNet阅读理解

E. Dual-direction short connection fusion module HRFormer applies transformer blocks to enlarge receptive field of fused feature Frs, and uses exchange units to absorb the merits of multi-scales features. The process is described as: HRFormer使用TRM块来扩…