定時任務有很多種,有一些大的框架也有一些簡單的實現。
比如常見的:
Timer和TimerTask
Quartz
非同步任務排程框架XXL-JOB
@Scheduled
小編也就知道這些,歡迎大佬補充哈!!
今天小編就以現在比較火的分散式定時任務xxl-job
,優點比較輕量級,但是從21年到現在沒有比較大的更新!
現在最新的好像是2.4.0
。
XXL-JOB
是一個分散式任務排程平臺
,其核心設計目標是開發迅速、學習簡單、輕量級
、易擴充套件。現已開放原始碼並接入多家公司線上產品線,開箱即用
。
它是美團大佬:許雪裡
開發出來的!
本篇以實踐教學為主,介紹大家感興趣可以去官方檔案去看看!
總體架構圖:
大家自行拉去最新程式碼即可:
匯出到本地資料庫:
XXL-JOB排程模組基於自研排程元件並支援叢集部署,排程資料庫表說明如下:
小編修改了一下埠號:
server.port=8087
記得調整成自己的資料庫密碼:
spring.datasource.password=root
由於sql檔案匯入的直接是個資料庫,不需要我們在調整資料庫的名稱!
小編這裡修改了埠號:
server.port=8086
第11行:修改為admin的埠
xxl.job.admin.addresses=http://127.0.0.1:8087/xxl-job-admin
第22行:小編9999埠被佔用,修改了一下埠
xxl.job.executor.port=9998
@XxlJob("testJobHandler")
public void testJobHandler() throws Exception {
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("這是第" + i + 1 + "條紀錄檔!");
System.out.println("這是第" + i + 1 + "次看到我了!");
}
System.out.println("定時任務結束!!");
}
根據上一步的設定,我們直接埠號加服務名字進行存取:
http://localhost:8087/xxl-job-admin/
賬號:admin
密碼:123456
自己寫完的定時任務,可以交給這個管理,這樣什麼時候執行,定時任務的執行規則,都可以在視覺化的介面進行管理和操作,更加的人性化!可以動態的修改cron
表示式,還有紀錄檔執行情況,這是真的香啊!!
預設已經把springboot整合上來了,如果大家是自己新建的模組可以新增一條,讓管理器管理咱們自己專案的定時任務,也就是使用@XxlJob
的任務!
這裡比較智慧,一些基本的cron
表示式都可以幫你寫,非常的人性!!
JobHandler:填@XxlJob
裡面的名字即可,小編這裡是:@XxlJob("testJobHandler")
,所以是testJobHandler
我們這次執行一次,看看控制檯是否列印記錄,看看我們寫的任務是否執行了!!
任務引數隨便輸入,機器地址為:http://192.168.1.207:9998/
,第4步檢視的,也就是管理端的地址加埠!!
我們看到方法成功被執行了!!
大家看到我的紀錄檔還是有執行失敗的,原因是開始埠被佔用,沒有注意,一直在測試,一直失敗!!
大家執行後一定看看控制檯有沒有報錯,如果是java.net.BindException: Address already in use: bind
那就是埠號被佔用,換一個就行了!!
也可以看看小編這篇文章,詳細解決了這個問題!!
Address already in use: bind【已解決】