簡體   English   中英

當 TaskScheduler 未設置/可用時,與 Spring @Scheduled/@EnableScheduling 注冊器一起使用的單線程默認調度程序的行為

[英]Behavior of the single-threaded default scheduler used with Spring @Scheduled/@EnableScheduling registrar when a TaskScheduler is not setup/available

EnableScheduling的 Spring 文檔中所述,當 TaskScheduler 池未設置/可用/可解析時,“將在注冊器中創建和使用本地單線程默認調度程序

現在,當這種情況發生時,這個默認調度程序的性質和行為是什么,特別是 w.r.t,它的線程是否可能由於執行期間未捕獲/處理的故障而終止?

這個默認調度程序是ThreadPoolTask Scheduler 的一個實例嗎? 如果是這樣,那么它的默認ErrorHandler策略是什么? 是否只是簡單地記錄了投擲物?

或者這個默認調度程序是一個更簡單的調度程序,只是一個ScheduledExecutorService的實例,它是通過調用Executors.html#newSingleThreadScheduledExecutor()構造的,如那里所述,“如果這個單線程由於在關閉之前的執行期間發生故障而終止,一個新的如果需要執行后續任務,將取而代之。”

謝謝

自己看了Spring任務調度源碼后找到了答案。 在這里分享給其他人。

對於這個,

現在,當這種情況發生時,這個默認調度程序的性質和行為是什么,特別是 w.r.t,它的線程是否可能由於執行期間未捕獲/處理的故障而終止?

答案如預期,不會。 用戶提交的任務被裝飾為org.springframework.scheduling.support.DelegatingErrorHandlingRunnable包裝用戶 Runnable,捕獲從它拋出的任何異常或錯誤,並允許org.springframework.util.ErrorHandler處理它。 這里是來源

對於這個,

這個默認調度程序是 ThreadPoolTaskScheduler 的一個實例嗎? 如果是這樣,那么它的默認 ErrorHandler 策略是什么? 是否只是簡單地記錄了投擲物?

或者這個默認調度程序是一個更簡單的調度程序,只是通過調用 Executors.html#newSingleThreadScheduledExecutor() 構造的 ScheduledExecutorService 的一個實例...

答案是它的一個org.springframework.scheduling.concurrentConcurrentTaskScheduler實例,它包裝了一個通過調用Executors.html#newSingleThreadScheduledExecutor()構造的 ScheduledExecutorService。

ErrorHandler策略是在錯誤級別記錄用戶 Throwables。 此外,重復任務也將抑制用戶 Throwable 並且不傳播(因此不會阻止任務的后續執行),而對於一次性任務,它將按預期傳播(重新拋出)。 這里是來源

以上兩者都是我所期待的,但我想確認一下,因為這個默認值的性質和行為沒有明確記錄。 也許更多的文檔可能會有所幫助。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM