我的問題是,我可以把一些支票或觀察者對@Schedule cron作業知道它是否正在運行或不?
基本上,你不能。
當您使用@Scheduled
時,Spring使用ScheduledAnnotationBeanPostProcessor
來註冊您指定的任務(帶註釋的方法)。它將它們註冊爲ScheduledTaskRegistrar
。 ScheduledAnnotationBeanPostProcessor
是ApplicationListener<ContextRefreshEvent>
。當它從ApplicationContext
收到ContextRefreshEvent
時,它會計劃在ScheduledTaskRegistrar
中註冊的任務。
在此步驟中,這些任務都安排有TaskScheduler
通常包裝一個ScheduledExecutorService
。 If an exception is uncaught in a submitted task, then the task is removed from the ScheduledExecutorService
queue.
的TaskScheduler
類不提供公共API來檢索預定任務,即。 ScheduledFuture
對象。所以你不能用它來找出你的任務是否正在運行。
而且你可能不應該。開發你的任務,你的方法,能夠承受拋出的異常。很顯然,有些時候這是不可能的。例如,如果出現網絡錯誤,您可能不得不重新啓動應用程序。如果不知道你的應用程序的其他內容,我會說更多的日誌記錄是你最好的選擇。
您可以隨時發送郵件到一個作業失敗給定的地址 - 與堆棧跟蹤它 – fge
感謝您的快速回復,你有一些例子,或者你可以點我到正確的文件有關@Schedule配置電子郵件 – user1544460