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
繁體地址,請注明出處:http://hk.pswp.cn/web/82587.shtml
英文地址,請注明出處:http://en.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…