Spring Boot(十)集成xxl-job

xxl-job官網

簡介

XXL-JOB是一個分佈式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用。

特性

1、簡單:支持通過Web頁面對任務進行CRUD操作,操作簡單,一分鐘上手;
2、動態:支持動態修改任務狀態、啓動/停止任務,以及終止運行中任務,即時生效;
3、調度中心HA(中心式):調度採用中心式設計,“調度中心”自研調度組件並支持集羣部署,可保證調度中心HA;
4、執行器HA(分佈式):任務分佈式執行,任務”執行器”支持集羣部署,可保證任務執行HA;
5、註冊中心: 執行器會週期性自動註冊任務, 調度中心將會自動發現註冊的任務並觸發執行。同時,也支持手動錄入執行器地址;
6、彈性擴容縮容:一旦有新執行器機器上線或者下線,下次調度時將會重新分配任務;
… 更多請參考官網

爲什麼使用xxl-job

  • quartz 的不足

Quartz作爲開源作業調度中的佼佼者,是作業調度的首選。但是集羣環境中Quartz採用API的方式對任務進行管理,從而可以避免上述問題,但是同樣存在以下問題:

問題一:調用API的的方式操作任務,不人性化;
問題二:需要持久化業務QuartzJobBean到底層數據表中,系統侵入性相當嚴重。
問題三:調度邏輯和QuartzJobBean耦合在同一個項目中,這將導致一個問題,在調度任務數量逐漸增多,同時調度任務邏輯逐漸加重的情況下,此時調度系統的性能將大大受限於業務;
問題四:quartz底層以“搶佔式”獲取DB鎖並由搶佔成功節點負責運行任務,會導致節點負載懸殊非常大;而XXL-JOB通過執行器實現“協同分配式”運行任務,充分發揮集羣優勢,負載各節點均衡。
XXL-JOB彌補了quartz的上述不足之處。

快速入門

在這裏插入圖片描述

github下載最新版本

源碼目錄說明:

xxl-job-admin:調度中心
xxl-job-core:公共依賴
xxl-job-executor-samples:執行器Sample示例(選擇合適的版本執行器,可直接使用,也可以參考其並將現有項目改造成執行器)
    :xxl-job-executor-sample-springboot:Springboot版本,通過Springboot管理執行器,推薦這種方式;
    :xxl-job-executor-sample-spring:Spring版本,通過Spring容器管理執行器,比較通用;
    :xxl-job-executor-sample-frameless:無框架版本;
    :xxl-job-executor-sample-jfinal:JFinal版本,通過JFinal管理執行器;
    :xxl-job-executor-sample-nutz:Nutz版本,通過Nutz管理執行器;
    :xxl-job-executor-sample-jboot:jboot版本,通過jboot管理執行器;

這裏我們大致用到這三個目錄 xxl-job-admin xxl-job-core xxl-job-executor-sample-springboot
在這裏插入圖片描述

這裏我們先配置部署“調度中心”

  1. 初始化數據庫腳本:
    “調度數據庫初始化SQL腳本” 位置爲:
    /xxl-job/doc/db/tables_xxl_job.sql

修改 調度中心配置文件

### 調度中心JDBC鏈接:鏈接地址請保持和 2.1章節 所創建的調度數據庫的地址一致
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 報警郵箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### 調度中心通訊TOKEN [選填]:非空時啓用;
xxl.job.accessToken=
### 調度中心國際化配置 [必填]: 默認爲 "zh_CN"/中文簡體, 可選範圍爲 "zh_CN"/中文簡體, "zh_TC"/中文繁體 and "en"/英文;
xxl.job.i18n=zh_CN
## 調度線程池最大線程配置【必填】
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### 調度中心日誌表數據保存天數 [必填]:過期日誌自動清理;限制大於等於7時生效,否則,-1,關閉自動清理功能;
xxl.job.logretentiondays=30

說明 這裏的配置文件大致只需要修改mysql連接的賬號密碼

配置完成後直接訪問 http://localhost:8080/xxl-job-admin
進入登入頁面輸入賬號密碼:
“admin/123456”
在這裏插入圖片描述
調度中心集羣方式或者以docker方式部署請參考官網

配置部署“執行器項目”

執行器配置,配置文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
執行器配置,配置內容說明:

### 調度中心部署跟地址 [選填]:如調度中心集羣部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳註冊""任務結果回調";爲空則關閉自動註冊;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 執行器通訊TOKEN [選填]:非空時啓用;
xxl.job.accessToken=
### 執行器AppName [選填]:執行器心跳註冊分組依據;爲空則關閉自動註冊
xxl.job.executor.appname=order-service
### 執行器註冊 [選填]:優先使用該配置作爲註冊地址,爲空時使用內嵌服務 ”IP:PORT“ 作爲註冊地址。從而更靈活的支持容器類型執行器動態IP和動態映射端口問題。
xxl.job.executor.address=
### 執行器IP [選填]:默認爲空表示自動獲取IP,多網卡時可手動設置指定IP,該IP不會綁定Host僅作爲通訊實用;地址信息用於 "執行器註冊""調度中心請求並觸發任務";
xxl.job.executor.ip=
### 執行器端口號 [選填]:小於等於0則自動獲取;默認端口爲9999,單機部署多個執行器時,注意要配置不同執行器端口;
xxl.job.executor.port=9999
### 執行器運行日誌文件存儲磁盤路徑 [選填] :需要對該路徑擁有讀寫權限;爲空則使用默認路徑;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 執行器日誌文件保存天數 [選填] : 過期日誌自動清理, 限制值大於等於3時生效; 否則,-1, 關閉自動清理功能;
xxl.job.executor.logretentiondays=30

上面我們修改下

xxl.job.executor.appname=order-service

這是執行器的名字
然後我們在任務調度中心創建我們的執行器和任務

創建執行器

在這裏插入圖片描述
在這裏插入圖片描述

  • AppName: 是每個執行器集羣的唯一標示AppName, 執行器會週期性以AppName爲對象進行自動註冊。可通過該配置自動發現註冊成功的執行器, 供任務調度時使用;
  • 名稱: 執行器的名稱, 因爲AppName限制字母數字等組成,可讀性不強, 名稱爲了提高執行器的可讀性;
  • 排序: 執行器的排序, 系統中需要執行器的地方,如任務新增, 將會按照該排序讀取可用的執行器列表;
  • 註冊方式:調度中心獲取執行器地址的方式;
    • 自動註冊:執行器自動進行執行器註冊,調度中心通過底層註冊表可以動態發現執行器機器地址;
    • 手動錄入:人工手動錄入執行器的地址信息,多地址逗號分隔,供調度中心使用;
  • 機器地址:"註冊方式"爲"手動錄入"時有效,支持人工維護執行器的地址信息;

創建任務

在這裏插入圖片描述

在這裏插入圖片描述
這裏Cron xxl-job V2.2可以直接選擇時間,不像以前必須自己填寫
jobHandler是我們開發任務使用的name,下面我們就來創建jobHandler,然後這個任務觸發就會自動執行jobHandler裏的邏輯代碼
更多參數解釋請參考官網

TestHandler 創建

說明: xxl-job V2.2更新了基於方法註解 “@XxlJob” 的方式進行任務開發
優點:
每個任務只需要開發一個方法,並添加”@XxlJob”註解即可,更加方便、快速。
支持自動掃描任務並注入到執行器容器。
缺點:要求Spring容器環境;

TestHandler

@Component
public class TestHandler {


    @XxlJob("testHandler")
    public ReturnT<String> execute(String param) throws Exception {

        System.out.println("這是一個xxl-job的測試任務");

        return ReturnT.SUCCESS;
    }
}

這個類開發完成後我們直接運行 XxlJobExecutorApplication,然後就可以看到任務被調度了

在這裏插入圖片描述
在這裏插入圖片描述

源碼下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章