定時job,在什麼時間進行執行**任務。
public static void main(string args) catch (exception e) }}
};thread thread = new thread(runnable);
thread.start();
}
public static void main(string args)
};timer timer = new timer();
// 天數
long delay = 0;
// 秒數
long period = 1000;
timer.scheduleatfixedrate(timertask, delay, period);
}
public static void main(string args)
};scheduledexecutorservice service = executors.newsinglethreadscheduledexecutor();
// 第二個引數為首次執行的延時時間,第三個引數為定時執行的間隔時間
service.scheduleatfixedrate(runnable, 1, 1, timeunit.seconds);
}
依賴:
org.quartz-scheduler
quartz
2.2.1
org.quartz-scheduler
quartz-jobs
2.2.1
任務:
public class jobtask implements job
}
啟動類:
public static void main(string args) throws schedulerexception
雖然以上是可以實現任務排程,但是一般情況下這個應用是要部署在多個tomcat伺服器上的,那麼又怎麼保證冪等性(對於乙個job,不可能每台伺服器都讓他執行一次嘛,這不就重複執行了嗎)呢。
1、使用分布式鎖,保證只有一台伺服器在執行
2、新增配置檔案標識,兩台伺服器的配置檔案不同,根據配置檔案不同進行任務的排程,缺點是,那這就不支援集群 了。
3、資料庫唯一標識,比如根據某一字段為true標識可以執行,執行時改為false,執行完後再改為true,缺點是經常運算元據庫,效率低
4、使用分布式任務排程平台xxljob
總的來說傳統的任務排程有很多缺點:
1、沒有補償機制(比如某個任務排程失敗後,只能等待下次排程或者人工排程)
2、不支援集群
3、不支援路由策略
4、統計(每個服務或者專案都有自己的任務排程,肯定是要統計一些成功啊失敗什麼的,傳統排程的話只能自己管理自己的,可是這種任務排程的話最好是採用集中管理比較好)
5、管理平台(沒有提供乙個集中管理所有任務排程的平台)
6、報警郵箱(比如說重試n次以後,都不成功那就發瘋郵件吧)、狀態監控(執行、結束、等待)
而以上這些在分布式排程平台xxljob都有支援。
首先對於任何乙個客戶端的任務,需要註冊到xxl-job的admin平台,然後admin將任務分發到各個執行器去執行,這裡選擇每個執行器的原理類似負載均衡策略。
實戰演練一下:
2、使用開發工具eclipse或者idea匯入該專案
3、找到master/doc下的資料庫檔案匯入資料庫比如xx-job
4、修改配置檔案xxl-job-admin.properties中資料庫的鏈結位址和密碼,這裡如果有自己搭建郵箱伺服器也可填寫郵箱伺服器等資訊
5、將該專案部署到tomcat伺服器進行啟動,訪問輸入密碼使用者名稱(預設admin,123456)
6、在web頁面中新建執行器以及任務
7、根據他提供的一些例子比如spring boot的,匯入他的依賴以及配置檔案這些資訊到自己的專案中
8、填寫好admin部署的專案位址,這點很重要,指定執行器名稱、ip、埠、以及日誌檔案路徑
9、記住xxljobconfig這個配置檔案一定要匯入
10、新建乙個handler類似這樣
/**
* 任務handler的乙個demo(bean模式)
* * 開發步驟: 1、繼承 「ijobhandler」 ; 2、裝配到spring,例如加 「@service」 註解; 3、加 「@jobhander」
* 註解,註解value值為新增任務生成的jobkey的值;多個jobkey用逗號分割; 4、執行日誌:需要通過 "xxljoblogger.log"
* 列印執行日誌;
* * @author xuxueli 2015-12-19 19:43:36
*/@jobhander(value = "demojobhandler")//這個對應admin中的對應執行器中的任務的名稱
@service
public class demojobhandler extends ijobhandler ")
private string port;
@override
public returntexecute(string... params) throws exception
return returnt.success;
}}
啟動專案後即可。這個是乙個分布式job排程平台,可以試著啟動多個專案然後新增到同乙個執行器中執行,按照他的規則填好集群中的ip即可。 分布式排程系統 任務排程
這就是分布式任務排程所要解決的問題 舉個栗子 如何快速的做出大量的熱狗?如果將每乙個乙個熱狗按流程做的話,可見工作量會十分巨大而且效率低下 對任務按需求切分成多個子任務 再對所有的中間態結果進行reduce合併,得到最終結果 我們換個角度理解mapreduce操作 還會有一些廚師,按照一定的比例,將...
quartz的分布式任務排程
在實際的併發量較高的專案中,架構師通常會對伺服器進行集群或者對專案架構進行分布式部署 請允許筆者模擬乙個場景 某專案構架採用了nginx進行三颱應用型伺服器的負載均衡,並且每台伺服器部署同一套 這裡顯然要對quartz相應的進行集群 假設,該專案中存在乙個定時器模組 如果這裡不做特殊處理的話,三颱應...
Celery 分布式任務排程模組
celery基本模型 celery 參考中文文件連線 簡單實現 1 定義任務 定義celery物件,連線到redis 定義任務 def send sms to,datas,temp id pass或實現業務邏輯與worker共用 資料儲存 2 啟動 celery worker celery a ta...