簡體   English   中英

強大的任務計划程序,任務在失敗時重新啟動

[英]Robust task scheduler with task restart on failure

我需要某種任務調度程序,它將調度一次任務的執行(一次)並監視任務是否仍然“處於活動狀態”,因此,如果發生某些未捕獲的異常(例如IOexception或數據庫連接失敗),調度程序將從頭開始重新啟動任務。

我不想在while(true)循環中遇到Throwable,只是想讓它失敗。

理想情況下,應該創建新線程。

有准備好使用的東西嗎? 用ThreadFactory實現這種調度程序很簡單,但仍不確定是否應該重新發明輪子。

Quartz是一個非常好的調度程序。 這是一些失敗重試代碼

嘗試這個

    Runnable task = new Runnable() {
        @Override
        public void run() {
            throw new RuntimeException();
        }
    };
    for (;;) {
        ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
        ScheduledFuture<?> f = ex.schedule(task, 1000, TimeUnit.MILLISECONDS);
        try {
            f.get();
            break;
        } catch (InterruptedException e) {
            f.cancel(true); 
            break;
        } catch (ExecutionException e) {
            // process exception
        } finally {
            ex.shutdown();
        }
    }

如果在任務執行期間發生異常,則f.get()會拋出ExecutionException,則可以對其進行處理並重新計划

暫無
暫無

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

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