2014-02-19 51 views
0

在我的應用我有一個連接到FTP服務器和傳輸文件,很簡單的功能一個cron作業,它是利用彈簧@Schedule註解:用cron表達式作爲參數進行配置。 它運行良好幾個月,然後突然停止,得到connectException。 可能是FTP服務器發生故障或導致cron線程停止的事情。 我看着(谷歌)的原因,但沒有得到任何(沒有太多的日誌也只是例外的名稱)。它可能是一次性的東西:)如何檢查@Schedule註釋(Spring 3.1)cron作業是否正在運行。

我的問題是,我可以把一些檢查或關於@Schedule cron作業的觀察者知道它是否在運行?

對不起,我不好解釋/英文

感謝

+0

您可以隨時發送郵件到一個作業失敗給定的地址 - 與堆棧跟蹤它 – fge

+0

感謝您的快速回復,你有一些例子,或者你可以點我到正確的文件有關@Schedule配置電子郵件 – user1544460

回答

1

我的問題是,我可以把一些支票或觀察者對@Schedule cron作業知道它是否正在運行或不?

基本上,你不能。

當您使用@Scheduled時,Spring使用ScheduledAnnotationBeanPostProcessor來註冊您指定的任務(帶註釋的方法)。它將它們註冊爲ScheduledTaskRegistrarScheduledAnnotationBeanPostProcessorApplicationListener<ContextRefreshEvent>。當它從ApplicationContext收到ContextRefreshEvent時,它會計劃在ScheduledTaskRegistrar中註冊的任務。

在此步驟中,這些任務都安排有TaskScheduler通常包裝一個ScheduledExecutorServiceIf an exception is uncaught in a submitted task, then the task is removed from the ScheduledExecutorService queue.

TaskScheduler類不提供公共API來檢索預定任務,即。 ScheduledFuture對象。所以你不能用它來找出你的任務是否正在運行。

而且你可能不應該。開發你的任務,你的方法,能夠承受拋出的異常。很顯然,有些時候這是不可能的。例如,如果出現網絡錯誤,您可能不得不重新啓動應用程序。如果不知道你的應用程序的其他內容,我會說更多的日誌記錄是你最好的選擇。

+0

感謝您的回答。我將在DB中維護cron上下文意味着上次執行時間,下一次執行時間。另一個服務將檢查時間與當前時間,並希望我會知道線程正在運行或不。 – user1544460

+0

我可能會注意到,爲什麼能確定這是一個合理的原因可能是使這可能是目前運行最好還是避免關閉服務,任務系統管理員的知名度,如總賬發佈程序。 –