Spring @Scheduled線程模型探究 - 改爲多線程

通過上一節分析源碼我們知道,執行任務的是TaskScheduler的實現類,在ScheduledAnnotationBeanPostProcessor#finishRegistration()方法中會設置TaskScheduler。
首先如果註冊器ScheduledTaskRegistrar中的scheduler成員爲空纔會從Spring上下文中加載
在這裏插入圖片描述
我們只需要爲ScheduledTaskRegistrar設置我們需要的TaskScheduler就好了。那麼問題來了,這個registrar從哪裏來?我們怎麼才能訪問到registrar並設置taskScheduler呢?
在這裏插入圖片描述
從這裏我們可以看到,registrar對象在ScheduledAnnotationBeanPostProcessor初始化時創建,到這裏斷了思路不知如何下手。再仔細翻看finishRegistration()方法有了新的發現
在這裏插入圖片描述
這裏獲取了SchedulingConfigurer的實現類,並且把執行configureTasks方法傳入了ScheduledTaskRegistrar,我們可以從這裏做文章。
在這裏插入圖片描述
我們只需要給傳入的taskRegistrar設置一個TaskScheduler就好可以了,好了大功告成~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章