Could not obtain transaction-synchronized Session for current thread

背景

写了一个函数,分别支持手动调用和定时任务调用。
测试的时候一直用手动点击按钮触发函数,功能可用
等到了测试定时任务的时候,后台报错

Could not obtain transaction-synchronized Session for current thread

错误分析

  1. 事务管理不匹配:你的代码是在 Spring 调度任务中执行的,但没有正确配置事务支持
  2. 线程上下文问题:定时任务可能在独立线程中执行,没有事务上下文
  3. 服务层缺少事务注解:调用的服务方法没有被事务管理器管理

解决思路

在报错的实现层代码上,增加事务注解

    // 添加事务注解@Transactional@Overridepublic void saveSplitAndFile(...) {// 这里调用查询方法// 其他业务逻辑}

一般到这步就可以了。但是我的代码还是继续报错,于是我给每个报错的代码,都加上了事务注解,并且给定时任务的实现函数也增加了事务注解。

运行,继续报错。

于是决定查看AOP配置,看当前的实现类是否在事务中正确配置了,一检查,果然发现问题。我们代码中的配置

	<aop:config><aop:pointcut id="transactionPointcut" expression="execution(* com.pms.*.service.impl.*.*(..))" /><aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /></aop:config>

我找到报错的调用函数,发现它的包结构,是在pms的业务包下,又新建了一个业务包,这样,AOP切片就找不到这个函数
正常包结构

com
--pms
----biz
------service
--------impl

新业务的包结构

com
--pms
----biz
------service
--------impl
------bizChild
--------service
----------impl

于是修改AOP切片代码

	<aop:config><aop:pointcut id="transactionPointcut" expression="execution(* com.pms.*.service.impl.*.*(..))||execution(* com.pms.bizChild.*.service.impl.*.*(..))" /><aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /></aop:config>

定时任务调度成功!

血泪教训,写代码一定要规范。其实这块最好的修改,应该是修改包结构,改为统一的包结构,这样就没有问题了。

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

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

相关文章

linux nm/objdump/readelf/addr2line命令详解

我们在开发过程中通过需要反汇编查看问题&#xff0c;那么我们这里使用rk3568开发板来举例nm/objdump/readelf/addr2line 分析动态库和可执行文件以及.o文件。 1&#xff0c;我们举例nm/objdump/readelf/addr2line解析linux 内核文件vmlinux &#xff08;1&#xff09;,addr2…

C++自定义简单的内存池

内存池简述 在C的STL的容器中的容器如vector、deque等用的默认分配器(allocator)都是从直接从系统的堆中申请内存&#xff0c;用一点申请一点&#xff0c;效率极低。这就是设计内存池的意义&#xff0c;所谓内存池&#xff0c;就是一次性向系统申请一大片内存&#xff08;预分…

【极客日常】分享go开发中wire和interface配合的一些经验

在先前一篇文章中&#xff0c;笔者给大家提到了go语言后端编程可以用wire依赖注入模块去简化单例服务的初始化&#xff0c;同时也可以解决服务单例之间复杂依赖的问题。但实事求是来讲&#xff0c;用wire也是有一些学习成本的&#xff0c;wire在帮助解决复杂依赖的问题同时&…

20250605车充安服务器受木马攻击导致服务不可用

https://mp.weixin.qq.com/s/2JyxmDIDBa9_owNjIJ6UIg 因业务服务器受木马攻击&#xff0c;服务器网络资源损耗&#xff0c;业务负载能力受损

web3-虚拟合约 vs 现实合同:权利、义务与资产的链上新秩序

web3-虚拟合约 vs 现实合同&#xff1a;权利、义务与资产的链上新秩序 一、智能合约vs真实世界合约 传统合约&#xff1a;基础要素 如下图&#xff0c;现实世界的合约&#xff0c;会有一个条款&#xff0c;然后下面还有一个“Alice”的签名 提出合约和接受合约&#xff1b; …

【面经分享】京东

线程池核心参数 7 个参数。 coreSize maxSize 阻塞队列 时间 时间 线程工厂 拒绝策略 核心参数的话&#xff0c;有 coreSize、阻塞队列、拒绝策略。 JVM 组成 内存上划分&#xff1a; 线程私有&#xff1a;Java 虚拟机栈&#xff0c;本地方法栈、Tlab、程序计数器 …

工作流引擎-11-开源 BPM 项目 jbpm

工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#xff0c;支持现实世界的流程自动化需求 工作流引擎-02-BPM OA ERP 区别和联系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 优…

深度学习在非线性场景中的核心应用领域及向量/张量数据处理案例,结合工业、金融等领域的实际落地场景分析

一、工业场景&#xff1a;非线性缺陷检测与预测 1. ‌半导体晶圆缺陷检测‌ ‌问题‌&#xff1a;微米级划痕、颗粒污染等缺陷形态复杂&#xff0c;与正常纹理呈非线性关系。‌解决方案‌&#xff1a; ‌输入张量‌&#xff1a;高分辨率晶圆图像 → 三维张量 (Batch, Height,…

Python-线程同步

多线程 案例 说明&#xff1a; 唱歌方法 sing()跳舞方法 dance()启用两个线程调用主线程结束 代码 # 导入线程模块 import threading import timedef sing(name,age):time.sleep(2)print(唱歌者姓名&#xff1a; name &#xff0c;年龄&#xff1a; str(age))print(正在唱…

前端八股之JS的原型链

1.原型的定义 每一个对象从被创建开始就和另一个对象关联&#xff0c;从另一个对象上继承其属性&#xff0c;这个另一个对象就是 原型。 当访问一个对象的属性时&#xff0c;先在对象的本身找&#xff0c;找不到就去对象的原型上找&#xff0c;如果还是找不到&#xff0c;就去…

kafka命令

kafka安装先安装zookeeper&#xff0c;jdk 确保jdk版本与kafka版本匹配&#xff1a; 先启动zookeeper&#xff1a; # 启动独立安装的zookeeper ./zkServer.sh start # 也可以自动kafka自带的zookerper ./zookeeper-server-start.sh ../config/zookeeper.pr…

微服务面试(分布式事务、注册中心、远程调用、服务保护)

1.分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产生的事务&#xff0c;例如&#xff1a; 跨数据源的分布式事务跨服务的分布式事务综合情况 我们之前解决分布式事务问题是直接使用Seata框架的AT模式&#xff0c;但是解决分布式事务…

Linux --进程优先级

概念 什么是进程优先级&#xff0c;为什么需要进程优先级&#xff0c;怎么做到进程优先级这是本文需要解释清楚的。 优先级的本质其实就是排队&#xff0c;为了去争夺有限的资源&#xff0c;比如cpu的调度。cpu资源分配的先后性就是指进程的优先级。优先级高的进程有优先执行的…

React 性能监控与错误上报

核心问题与技术挑战 现代 React 应用随着业务复杂度增加&#xff0c;性能问题和运行时错误日益成为影响用户体验的关键因素。没有可靠的监控与错误上报机制&#xff0c;我们将陷入被动修复而非主动预防的困境。 性能指标体系与错误分类 关键性能指标定义 // performance-me…

芒果深度学习检测:开启农业新视界(猫脸码客第230期)

芒果深度学习检测&#xff1a;开启农业新视界 一、引言 芒果作为热带水果中的“明星”&#xff0c;在全球水果市场占据着重要地位&#xff0c;拥有广泛的市场需求和可观的经济价值。伴随人们生活品质的提升&#xff0c;对芒果品质的要求也愈发严苛。芒果产业规模持续扩张&#…

PDF文件转换之输出指定页到新的 PDF 文件

背景 一份 PDF 学习资料需要打印其中某几页&#xff0c;文件有几百兆&#xff0c;看到 WPS 有PDF拆分功能&#xff0c;但是需要会员&#xff0c;开了一个月会员后完成了转换。突然想到&#xff0c;会员到期后如果还要拆解的话&#xff0c;怎么办呢&#xff1f;PDF 文件拆解功能…

【计网】SW、GBN、SR、TCP

目录 三种可靠传输机制&#xff08;数据链路层&#xff09; 停止-等待&#xff08;Stop and Wait&#xff0c;SW&#xff09;协议 回退N帧&#xff08;Go-back-N&#xff0c;GBN&#xff09;协议 选择重传&#xff08;Selective Repeat&#xff0c;SR&#xff09;协议 传输…

Go的隐式接口机制

正确使用Interface 不要照使用C/Java等OOP语言中接口的方式去使用interface。 Go的Interface的抽象不仅可以用于dynamic-dispatch 在工程上、它最大的作用是&#xff1a;隔离实现和抽象、实现完全的dependency inversion 以及interface segregation(SOLID principle中的I和D)。…

Async-profiler 内存采样机制解析:从原理到实现

引言 在 Java 性能调优的工具箱中&#xff0c;async-profiler 是一款备受青睐的低开销采样分析器。它不仅能分析 CPU 热点&#xff0c;还能精确追踪内存分配情况。本文将深入探讨 async-profiler 实现内存采样的多种机制&#xff0c;结合代码示例解析其工作原理。 为什么需要内…

Android 颜色百分比对照

本文就是简单写个demo,打印下颜色百分比的数值.方便以后使用. 1: 获取透明色 具体的代码如下: /*** 获取透明色* param percent* param red* param green* param blue* return*/public static int getTransparentColor(int percent, int red, int green, int blue) {int alp…