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

