亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異步不適用于控制器的抽象超類方法

異步不適用于控制器的抽象超類方法

汪汪一只貓 2022-05-25 16:56:07
我有一個BaseRestControllerRest 控制器擴展的類。它有一個我想異步運行的方法。public abstract class BaseRestController {    ...    @Async("someThreadPoolTaskExecutor")    public void someAsyncTask() {        ...    }}@RestControllerpublic class MyRestController extends BaseRestController {    ...    @GetMapping("/some/path")    public SomeEntity getSomething() {        ...        this.someAsyncTask();    }        }我已經啟用Async了使用注釋,實現了一個獲取someThreadPoolTaskExecutor TaskExecutor和所有的方法。如果我@Async("someThreadPoolTaskExecutor")使用 Service 的(用 注釋的類@Service)方法,它可以工作,但如果我在BaseRestController中使用someAsyncTask()這樣做,代碼將不會異步運行。用@Component裝飾類也不起作用。關于異步的 Spring 指南也沒有幫助。在它的演示中,它還演示了帶有服務類的異步。雖然在此過程中,我意識到我想要實現的行為最好委托給服務類,但我很好奇為什么上述方法不起作用。我正在使用Spring Boot 的2.1.0.RELEASE。
查看完整描述

1 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

有一些規則,你正在做自我調用,這在這里@Async不起作用

  • 它必須僅應用于公共方法

  • 自調用——從同一個類中調用異步方法——不起作用

原因很簡單——方法需要公開才能被代理。而自調用也不起作用,因為它繞過了代理,直接調用了底層方法。


查看完整回答
反對 回復 2022-05-25
  • 1 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號