java事务提交完成再继续执行_如何在事务提交后才执行某个方法

2023-10-28

如何在事务提交后才执行某个方法

开发过程中经常出现如下场景;

新增一篇文章,然后发一个广播mq出去;

广播监听者监听到消息然后根据文章id回查文章内容;

但是此时新增文章的方法的事务还没有提交,根据id回查数据库的时候查到数据为空。

代码如下:

@Transactional

public void add文章() {

//insert文章

//sendmq

}

此时我们希望的效果是,等事务提交之后再发mq。

可以改成如下写法:

public void add文章() {

//insert文章

//sendmq

}

@Transactional

public void insert文章() {

//insert文章

}

但是这样每次涉及这样的业务都需要包一层,而且很多时候并不知道调用add文章的外层是否还有@Transactional注解

我们希望达到的效果是注册一个mq事件,等事务提交后再出发我们的mq事件。

TransactionSynchronizationManager

嵌入如下代码,可以注册一个事务事件,在事务提交之后才出发我的方法。

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {

@Override

public void afterCommit() {

System.out.println("a");

}

});

总的写法如下:

@Transactional

public void add文章() {

//insert文章

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {

@Override

public void afterCommit() {

//sendmq

}

});

}

这样mq的方法就会在事务提交后才出发。这样回查的时候就不会空了。

注意,如果是读写分离的数据库数据同步的延时,该方法不能解决,还是会查到空值。此时就要用延时队列的办法解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java事务提交完成再继续执行_如何在事务提交后才执行某个方法 的相关文章

  • 【漏洞复现】CVE-2023-22809 sudo提权漏洞

    一 前言 漏洞简介 Sudo中的sudoedit对处理用户提供的环境变量 如SUDO EDITOR VISUAL和EDITOR 中传递的额外参数存在缺陷 当用户指定的编辑器包含绕过sudoers策略的 参数时 拥有sudoedit访问权限的
  • 「iOS」swift 和 objectivec 获得对象的 class 或者 Type 的方法

    一 oc 中使用 oc 中非常简单 一行搞定 NSString str1 test str1 class 这里的 str1 class 就是获取对象 class 的方法 二 swift 中使用 时间紧 任务重 上代码 var str Str
  • Windows 找不到文件 ‘chrome‘。请确认文件名是否正确后,再试一次。

    Windows 找不到文件 chrome 请确认文件名是否正确后 再试一次 错误 当不运行 IDEA 项目 通过快捷键进入浏览器时 可能会出现以下错误 原因 未设置 chrome 路径 导致找不到路径报错 解决办法 1 在桌面上找到 chr
  • 解决qemu虚拟机中内存偏小的问题

    问题描述 最近测试部报了一个问题 云平台中设置大于4GB的内存并设置numa 启动linux2 6 32内核的客户机 之后操作系统中查看实际内存是1 9G 比设置内存小了大概2 1GB 使用版本信息如下 QEMU version 3 0 0
  • 替代MySQL半同步复制,Meta技术团队推出MySQL Raft共识引擎

    作者 Anirban Rahut Abhinav Sharma Yichen Shen Ahsanul Haque 原文链接 https engineering fb com 2023 05 16 data infrastructure m
  • 关于突破SQL注入限制的新思路

    http www bitscn com network protect 200804 139215 html 突然想我们是否可以用什么方法绕过SQL注入的限制呢 到网上考察了一下 提到的方法大多都是针对AND与 号和 号过滤的突破 虽然有点
  • Mac电脑使用小技巧

    Mac OS很多操作与Windows还是有较大的区别 需要一段时间适应 因此我整理了Mac OS的实用小技巧 希望帮助刚入手Mac的小伙伴轻松上手 一 使用预览直接修改图片大小 在遇到需要修改图片的大小 大家的惯有思维就是用Photosho
  • C语言标准库函数qsort(快速排序函数)

    文章目录 一 函数原型 二 函数解析 比较函数 三 手写快排 四 使用qsort 1 对int数组排序 2 对double数组排序 3 对char数组排序 4 对字符串排序 1 char s 2 char s 5 对结构体排序 1 一级排序
  • 简单一行代码解决流读取导致StringBuilder.toString()乱码问题

    今天做上传功能代码读取返回值得时候 StringBuilder toString 出现乱码的情况 在网上找了一堆乱七八糟的办法 繁琐不说 代码还好几行 后来看到String类构造自己就有办法解决这个问题 简单一行代码搞定 在这里记录一下 S
  • 变分推断(Variational Inference)解析

    一 什么是变分推断 假设在一个贝叶斯模型中 x x x为一组观测变量 z z z为一组隐变量 参数也看做随机变量 包含在 z
  • Linux下的TCP&UDP通信作业

    题目描述 一 对于TCP传输 实现客户端发送某特定信息 字符时结束信息传输 断开连接 二 编写程序验证在同一台机器上TCP和UDP能不能同时占用同一个端口进行通信 开始编程 使用vim创建并编辑几个源文件 vim TCPserver c v
  • 由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序可能会解决此问题。

    出错情况如下 实在着不住了 那些不懂装懂的不要出来祸害人了 又是网上下载vcruntime140 dll放到c盘system32 64文件 这种做法纯属扯淡 vcruntime140 dll文件就是VC 2010的一个文件而已 直接下载运行
  • 序列化理解

    Java序列化 Java提供了一种对象序列化的机制 在该机制中 一个对象可以被表示为一个字节序列 该字节序列包含对象的数据 有关对象的类的信息和存储在对象中数据的类型 将序列化对象写入文件后 可以从文件中读取出来 对且对其进行反序列化 就是
  • 手把手教你配置Pytorch环境并使用(Win10系统下基于Anaconda完成的pytorch1.7.1和torchvision0.8.2的Pytorch深度学习环境搭建)

    概述 1 下载并安装Anaconda 2 在Anaconda Navigator中新建Pytorch虚拟环境 3 配置虚拟环境所需要的torch和torchvision 4 在Pycharm编译环境中使用刚刚建好的Pytorch虚拟环境 详
  • tensorflow兼容处理 tensorflow.compat.v1 tf.contrib

    20201130 问题提出 v1版本中tensorflow中contrib模块十分丰富 但是发展不可控 因此在v2版本中将这个模块集成到其他模块中去了 在学习tensorflow经常碰到tf contrib的代码 一敲就报错 import
  • ME28/ME2L/ME2N增强字段

    导语 用户希望在ME28采购订单审批的时候显示采购订单创建人以及描述 需要通过增强字段来实现 查询了一下SAP有标准的BADI可以进行增强 好像ME28 ME2L ME2N都是通过这里实现 使用不同的展示结构 这里没有深入测试其他事物 仅以
  • 终于弄明白 i = i++和 i = ++i 了

    作者 默辨 来源 https urlify cn Abyuyy 写在前面 前些天看完了JVM的内存结构 自以为自己是懂了 心里想想不就是分线程共享和线程私有嘛 然后又怎么怎么分怎么怎么的嘛 直到遇到了这道题目 说句实话 曾经自己做这种运算题
  • 空间金字塔池化、空洞卷积、深度可分离卷积

    空间金字塔池化 其主要目的是对于任意尺寸的输入产生固定大小的输出 思路 对于不同大小的feature map分成不同大小的块 不同大小的等份 根据具体情况进行设定 然后对每一份进行最大池化 一般是进行最大池化 将池化后的feature ma
  • 项目管理十大知识领域(十)--- 项目采购管理(过程、输入、工具和技术、输出)

    项目管理十大知识领域 十 项目采购管理 1 规划采购管理 输入 项目管理计划 需求文件 风险登记册 活动资源需求 项目进度计划 活动成本估算 干系人等级册 事业环境因素 组织过程资产 工具 自制或外购分析 专家判断 市场调研 会议 输出 采

随机推荐

  • leetcode第一题 :两数之和

    两数之和的哈希表解法 一 题目描述 二 算法思路 1 哈希表的相关说明 2 哈希算法 3 题目讲解 三 题解代码 四 运行结果以及最后的一点点解释 一 题目描述 这里直接贴的leetcode中的题目 哈哈哈 给定一个整数数组 和一个整数目标
  • 深入了解MySQL存储引擎-------InnoDB

    如果想看自己的数据库默认使用的那个存储引擎 可以通过使用命令SHOW VARIABLES LIKE storage engine 一 InnoDB存储引擎 1 InnoDB是事务型数据库的首选引擎 支持事务安全表 ACID 事务的ACID属
  • QT笔记- QListWidget删除item时, 信号QListWidget::currentRowChanged()出现行(索引)错误

    删除QListWidget行或项时 currentRowChanged 信号会在删除前发出 Qt信号QListWidget currentRowChanged int row 在QListWidget当前行号改变时发出 但需注意的是 在使用
  • Spring-IOC容器(控制反转)

    目录 Spring框架图 IOC原理 IOC接口 BeanFactory DI依赖注入 Spring框架图 1 核心层 Core Container 核心容器 这个模块是Spring最核心的模块 其他的都需要依赖该模块 2 AOP层 AOP
  • C++,友元的基本概念以及友元的创建

    一 友元 1 1 友元的基本概念 C 控制对类对象私有部分的访问 通常公有类方法提供唯一的访问途径 但是有时候这种限制太严格 以致于不适合特定的编程问题 在这种情况下 C 提供了另一种形式的访问权限 即友元 友元的种类 友元函数 友元类 友
  • 【软考】-高项-立项管理-重要知识点思维导图

    高项 立项管理 项目立项管理 项目立项包括4个阶段 项目建议与立项申请 含义 作用 项目建议书内容 初步可行性研究 详细可行性研究 内容 评估与决策 7个步骤 可行性研究 内容 可研报告中的开发总成本 经营成本 非经营成本 项目立项管理的作
  • Python判断一个数是否为素数

    Python判断一个数是否为素数 定义一个函数 用来判断一个数 是否为素数 函数名 isPrime 参数 数值n 返回值 布尔类型结果 def isPrime n flag True for i in range 2 n if n i 0
  • 服务器部署 Nginx + Django + Vue

    服务器部署 Nginx Django Vue 服务器预设 租服务器 SSH 远程连接 配置公钥 更新系统软件包 配置 Django 安装 python3 8 4 安装虚拟环境 创建虚拟环境 虚拟环境中安装 Django 和 uWSGI 安装
  • 搜索引擎中网络爬虫的设计分析

    搜索引擎中网络爬虫的设计分析 作者 Ackarlix 下面简单介绍一下搜索引擎的机器爬虫的制作和一些基本要注意的事项 说的简单易懂一些 网络爬虫跟你使用的 离线阅读 工具差不多 说离线 其实还是要跟网络联结 否则怎么抓东西下来 那么不同的地
  • C++学习必备网站推荐收藏

    在 C 的学习过程中离不开阅读大量的免费文档和网站 今天在此分享一些值得收藏的C 学习网站 希望对大家有所帮助 第一个 cplusplus http www cplusplus com 一个优秀的 C 学习网站 除了提供相应的教程之外 还有
  • [Python]pyinstaller打包32位exe小记

    由于媳妇工作中需要大量表格 故利用Python开发一个处理Excel表格的小工具 目前第一版本功能比较少 bug比较多 本人开发环境是在Mac系统下 然后在window下打包成64位和32位通用的exe程序 本文主要介绍打包过程中的流程和注
  • Elasticsearch 带中文分词的全文检索(分页+高亮返回)

    一 全文搜索介绍 Full text queries 全文搜索主要有以下几种类型 1 1 匹配查询 match query QueryBuilder qb matchQuery name field 字段 kimchy elasticsea
  • Oracle中SYS_CONNECT_BY_PATH函数的妙用

    在Oracle中 SYS CONNECT BY PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分 然后连接在一个列中显示 Oracle中SYS CONNECT BY PATH函数是非常重要的函数 下面就为您介绍一个使
  • [渗透测试实战]vulnhub靶场1 初步掌握渗透流程(详细步骤)

    文章目录 1 主机发现 确定攻击目标 2 端口发现 寻找突破口 3 web渗透 dirb扫描web目录 fuzz获取正确url参数 WordPress漏洞利用 获取wordpress用户名 4 文件上传 反弹连接 5 msf提权 解决gcc
  • 关于读取回车空白键:cin.unsetf(ios::skipws);

    ios skipws Skip white space 跳过空白 空格 表格键 unsetf 取消 格式 设置 cin unsetf ios skipws 取消 cin 输入 跳过空白 的 默认 设置 注意 不是所有 编译器 都支持 ios
  • CORS 头缺少 'Access-Control-Allow-Origin'

    今天使用vue发送Ajax请求时发现 请求不到数据 打开浏览器控制台发现报已拦截跨源请求 同源策略禁止读取位于 http vue studyit io api get lunbo 的远程资源 原因 CORS 头缺少 Access Contr
  • 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

    在JSP里 获取客户端的IP地址的方法是 request getRemoteAddr 这种方法在大部分情况下都是有效的 但是在通过了Apache Squid等反向代理软件就不能获取到客户端的真实IP地址了 如果使用了反向代理软件 将http
  • yudao-cloud功能点

    yudao cloud功能点 gatway 灰度发布 日志打印 token认证 动态路由 分支主题 2
  • ChatGPT+Mermaid自然语言流程图形化产出小试

    ChatGPT Mermaid语言实现技术概念可视化 本文旨在介绍如何使用ChatGPT和Mermaid语言生成流程图的技术 在现代软件开发中 流程图是一种重要的工具 用于可视化和呈现各种流程和结构 结合ChatGPT的自然语言处理能力和M
  • java事务提交完成再继续执行_如何在事务提交后才执行某个方法

    如何在事务提交后才执行某个方法 开发过程中经常出现如下场景 新增一篇文章 然后发一个广播mq出去 广播监听者监听到消息然后根据文章id回查文章内容 但是此时新增文章的方法的事务还没有提交 根据id回查数据库的时候查到数据为空 代码如下 Tr