線程池中使用spring aop事務增強
這篇文章主要介紹了線程池中使用spring aop事務增強,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
問題描述:
在項目里使用了線程池運行同一個類的實例方法,代碼大致如下,運行時發(fā)現(xiàn)job方法的事務不生效
@Transactional
public void doJob() {
EXECOTOR.execute(() ->job());
}
@Transactional
public void job(){
//db operation
}
原因分析:
debug進入job方法時,發(fā)現(xiàn)運行job方法的實例是個普通實例而不是個代理對象,因此無法實現(xiàn)aop增強
解決辦法:
在doJob中調(diào)用AopContext.currentProxy()獲取當前的代理對象,在代理對象上調(diào)用job方法
@Transactional
public void doJob() {
AAAService proxy = (AAAService) AopContext.currentProxy();
EXECOTOR.execute(() ->proxy.job());
}
@Transactional
public void job(){
//db operation
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring如何配置文件動態(tài)讀取pom.xml中的屬性
在項目開發(fā)中,經(jīng)常需要將pom.xml中的屬性動態(tài)傳遞給Spring配置文件,實現(xiàn)這一需求,可通過Maven的資源過濾功能,配置占位符替換,具體方法包括:在pom.xml中啟用filtering,然后在Spring配置文件中通過${property}方式引用屬性2024-10-10
使用Java創(chuàng)建數(shù)據(jù)透視表并導出為PDF的方法
數(shù)據(jù)透視分析是一種強大的工具,可以幫助我們從大量數(shù)據(jù)中提取有用信息并進行深入分析,本文將介紹如何使用Java來構(gòu)建PivotTable以及實現(xiàn)數(shù)據(jù)透視分析,并將其導出為PDF2023-10-10
Spring?Cloud?中使用?Sentinel?實現(xiàn)服務限流的兩種方式
這篇文章主要介紹了Spring?Cloud?中使用?Sentinel?實現(xiàn)服務限流的方式,通過示例代碼主要介紹了Sentinel的兩種實現(xiàn)限流的方式,需要的朋友可以參考下2024-03-03
Java中Elasticsearch 實現(xiàn)分頁方式(三種方式)
Elasticsearch是用Java語言開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎,這篇文章主要介紹了Elasticsearch實現(xiàn)分頁的3種方式,需要的朋友可以參考下2022-07-07

