@Transactional注解和@Async注解無效

一:@Async

? ? ????springboot想要使用異步處理的時候,我們會使用到@Async注解,表明某個方法為異步調(diào)用,我們需要使用@EnableAsync開啟異步調(diào)用。

但是有時候明明加了這兩個注解,異步確沒有起作用,我在開發(fā)中也遇到了這個問題,結(jié)果查閱資料發(fā)現(xiàn)調(diào)用異步的方法和異步方法不能在同一個類中,下面例子

@Test

public void TestAsync()throws InterruptedException {

????System.out.println("開始");

????testService.async();

????//async();這里調(diào)用同類中的async()不會起作用

? ? System.out.println("結(jié)束");

????Thread.sleep(5000);

}@Async

public void async(){

????try {

????System.out.println("async start");

????Thread.sleep(2000);

????System.out.println("async end");

}catch (InterruptedException e) {

????e.printStackTrace();

}

}


二:@Transactional

使用@Transactional時,有幾點需要注意:

? ? 1)、必須保證這個注解修飾的方法是public方法

? ? 2)、想要異?;貪L,必須是非檢查異常,即不用try-catch包裹,除非手動指明回滾類型rollbackFor=Exception.class

? ? 3)、調(diào)用事務(wù)的方法必須和事務(wù)方法不在同一個類中

具體原因是springboot使用@Transactional注解和@Async注解的時候是使用代理模式,jdk代理或者是cglib代理需要被實現(xiàn)或者繼承,所以必須是public方法,并且在同一類中方法在類體中執(zhí)行,沒法截獲方法調(diào)用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • DAY 05 1、 public classArrayDemo { public static void mai...
    周書達(dá)閱讀 833評論 0 0
  • JAVA面試題 1、作用域public,private,protected,以及不寫時的區(qū)別答:區(qū)別如下:作用域 ...
    JA尐白閱讀 1,264評論 1 0
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 5,205評論 1 114
  • 生活中,我們偶爾會冒出一些“無聊”的情緒。覺得沒什么事情可做,覺得自己剛剛做的事情很沒勁,會坐著發(fā)呆,會想隨便做...
    StarrySky閱讀 420評論 0 1
  • 原理簡述 單管道后門相對于雙管道后門(參照前面發(fā)的Blog),很明顯單管道后門使用了“cmd.exe /c [命令...
    PeterZ1997閱讀 562評論 0 0

友情鏈接更多精彩內(nèi)容