springboot整合xxl-job分散式定時任務【圖文完整版】

2022-08-10 12:07:10

一、前言

定時任務有很多種,有一些大的框架也有一些簡單的實現。
比如常見的:

  • JDK的Timer和TimerTask
  • Quartz非同步任務排程框架
  • 分散式定時任務XXL-JOB
  • Spring Task註解@Scheduled

小編也就知道這些,歡迎大佬補充哈!!

今天小編就以現在比較火的分散式定時任務xxl-job,優點比較輕量級,但是從21年到現在沒有比較大的更新!
現在最新的好像是2.4.0

二、xxl-job介紹

XXL-JOB是一個分散式任務排程平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴充套件。現已開放原始碼並接入多家公司線上產品線,開箱即用

它是美團大佬:許雪裡開發出來的!

本篇以實踐教學為主,介紹大家感興趣可以去官方檔案去看看!

xxl-job檔案

總體架構圖:

大家自行拉去最新程式碼即可

專案地址

三、修改設定

1. 執行sql檔案


匯出到本地資料庫:

XXL-JOB排程模組基於自研排程元件並支援叢集部署,排程資料庫表說明如下:

  • xxl_job_lock:任務排程鎖表;
  • xxl_job_group:執行器資訊表,維護任務執行器資訊;
  • xxl_job_info:排程擴充套件資訊表: 用於儲存XXL-JOB排程任務的擴充套件資訊,如任務分組、任務名、機器地址、執行器、執行入參和報警郵件等等;
  • xxl_job_log:排程紀錄檔表: 用於儲存XXL-JOB任務排程的歷史資訊,如排程結果、執行結果、排程入參、排程機器和執行器等等;
  • xxl_job_log_report:排程紀錄檔報表:使用者儲存XXL-JOB任務排程紀錄檔的報表,排程中心報表功能頁面會用到;
  • xxl_job_logglue:任務GLUE紀錄檔:用於儲存GLUE更新歷史,用於支援GLUE的版本回溯功能;
  • xxl_job_registry:執行器登入檔,維護線上的執行器和排程中心機器地址資訊;
  • xxl_job_user:系統使用者表;

2. 修改xxl-job-admin設定

小編修改了一下埠號:

server.port=8087

記得調整成自己的資料庫密碼:

spring.datasource.password=root

由於sql檔案匯入的直接是個資料庫,不需要我們在調整資料庫的名稱!

3. 需修改xxl-job-executor-sample-springboot設定

小編這裡修改了埠號:

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

4. 新增自己的定時任務

@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("定時任務結束!!");
}

四、執行專案

1. 啟動專案

2. 登入

根據上一步的設定,我們直接埠號加服務名字進行存取:

http://localhost:8087/xxl-job-admin/

賬號:admin
密碼:123456

3. xxl-job的好處

自己寫完的定時任務,可以交給這個管理,這樣什麼時候執行,定時任務的執行規則,都可以在視覺化的介面進行管理和操作,更加的人性化!可以動態的修改cron表示式,還有紀錄檔執行情況,這是真的香啊!!

4. 檢視執行器獲取網址

預設已經把springboot整合上來了,如果大家是自己新建的模組可以新增一條,讓管理器管理咱們自己專案的定時任務,也就是使用@XxlJob的任務!

5. 新增任務管理

這裡比較智慧,一些基本的cron表示式都可以幫你寫,非常的人性!!
JobHandler:填@XxlJob裡面的名字即可,小編這裡是:@XxlJob("testJobHandler"),所以是testJobHandler

6. 執行任務

我們這次執行一次,看看控制檯是否列印記錄,看看我們寫的任務是否執行了!!


任務引數隨便輸入,機器地址為:http://192.168.1.207:9998/,第4步檢視的,也就是管理端的地址加埠!!

7. 執行成功

我們看到方法成功被執行了!!

8. 檢視紀錄檔

五、總結

大家看到我的紀錄檔還是有執行失敗的,原因是開始埠被佔用,沒有注意,一直在測試,一直失敗!!
大家執行後一定看看控制檯有沒有報錯,如果是java.net.BindException: Address already in use: bind
那就是埠號被佔用,換一個就行了!!
也可以看看小編這篇文章,詳細解決了這個問題!!

Address already in use: bind【已解決】


有緣人才可以看得到的哦!!!

點選存取!小編自己的網站,裡面也是有很多好的文章哦!