Spring Boot 集成 XXL-JOB 任務調度平臺

在開發中須要將已有的定時任務抽離出來,方便管理查看,所以選擇集成分佈式任務調度平臺 XXL-JOB,本文就講解下 Spring Boot 如何集成 XXL-JOB 任務調度平臺。java

XXL-JOB 簡介

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

下面咱們在 Spring Boot 中集成 XXL-JOB 來完成定時任務的編寫(本文選擇的 XXL-JOB 版本爲 2.2.0)。github

Spring Boot 集成 XXL-JOB

Spring Boot 集成 XXL-JOB 主要分爲如下兩步:web

  1. 配置運行調度中心(xxl-job-admin)spring

  2. 配置運行執行器項目(xxl-job-executor)sql

配置運行調度中心

首先從源碼倉庫中下載代碼,代碼地址有兩個:數據庫

  1. GitHub:https://github.com/xuxueli/xxl-jobapp

  2. Gitee:http://gitee.com/xuxueli0323/xxl-job分佈式

下載完以後,在 doc/db 目錄下有數據庫腳本 tables_xxl_job.sql,執行下腳本初始化調度數據庫 xxl_job,以下圖所示:ide

f0204658d86c47daa671791c657bdc96


能夠根據須要修改 xxl-job-admin 的配置文件,主要是修改數據源信息,若須要用到郵件報警功能,須要配置郵箱。

而後啓動項目,正常啓動後,訪問地址爲:http://localhost:8080/xxl-job-admin,默認的帳戶爲 admin,密碼爲 123456,訪問後臺管理系統後臺,界面以下:

88efca2917964a6cb69b07cf74308f42


這樣就表示調度中心已經搞定了,下一步就是建立執行器項目。

配置運行執行器項目

建立一個項目,在項目中加入 xxl-job-core 依賴,項目依賴以下所示:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version></dependency>

加入配置

在配置文件 application.properties 中配置 xxl-job 執行器的相關參數,具體內容以下:

### 調度中心部署跟地址 [選填]:如調度中心集羣部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳註冊"和"任務結果回調";爲空則關閉自動註冊;xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin### 執行器通信TOKEN [選填]:非空時啓用;xxl.job.accessToken=### 執行器AppName [選填]:執行器心跳註冊分組依據;爲空則關閉自動註冊xxl.job.executor.appname=xxl-job-executor### 執行器註冊 [選填]:優先使用該配置做爲註冊地址,爲空時使用內嵌服務 」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

其中指定了上一步部署的調度中心的地址和執行器的相關參數。

而後在 config 包下建立 XxlJobConfiguration 類,會從配置文件中讀取到對應的參數,接着申明一個 xxlJobExecutor 方法,返回的是一個 XxlJobSpringExecutor,這個方法主要是如何初始化並建立一個 XxlJobSpringExecutor。

@Configurationpublic class XxlJobConfiguration {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfiguration.class);    @Value("${xxl.job.admin.addresses}")    private String adminAddresses;

    @Value("${xxl.job.accessToken}")    private String accessToken;

    @Value("${xxl.job.executor.appname}")    private String appname;

    @Value("${xxl.job.executor.address}")    private String address;

    @Value("${xxl.job.executor.ip}")    private String ip;

    @Value("${xxl.job.executor.port}")    private int port;

    @Value("${xxl.job.executor.logpath}")    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")    private int logRetentionDays;

    @Bean    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        // registry jobhandler        XxlJobSpringExecutor.registJobHandler("beanClassJobHandler", new BeanClassJobHandler());
        // init executor        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
}

接下來就能夠建立任務了。

編寫 JobHandler

在這裏主要演示下 Bean 模式的任務,能夠基於類和方法進行開發,下面先介紹基於類的開發的任務。

BEAN模式(類形式)

首先建立一個類 BeanClassJobHandler,繼承 IJobHandler 實現 execute 方法,而後經過 XxlJobLogger.log 來打印日誌。

@Componentpublic class BeanClassJobHandler extends IJobHandler {

    @Override    public ReturnT<String> execute(String param) throws Exception {
        XxlJobLogger.log("bean class jobhandler running...");
        return ReturnT.SUCCESS;
    }
}

基於類開發的任務須要手動註冊到執行器工廠,具體代碼以下所示:

XxlJobSpringExecutor.registJobHandler("beanClassJobHandler", new BeanClassJobHandler());

到此一個任務就開發完成了,下面介紹下基於方法的開發方式:

BEAN模式(方法形式)

基於方法開發的任務比較簡單,編寫一個方法,並添加 @XxlJob 註解,會自動掃描該任務並注入到執行器容器。

@Componentpublic class BeanMethodJobHandler {

    @XxlJob("beanMethodJobHandler")
    public ReturnT<String> beanMethodJobHandler(String param) throws Exception {
        XxlJobLogger.log("bean method jobhandler running...");
        return ReturnT.SUCCESS;
    }
}

至此,執行器項目就開發完成了,啓動項目,在執行器管理頁面添加該執行器。

e85ff2b441e4434fb08c0939a322700a


新增執行器

執行器添加完成後,須要在任務管理界面添加咱們剛纔開發的兩個任務,下面以 BEAN 模式方法任務爲例:

41187bd63f5646f1953e939b33632dd1


新增任務

點擊保存後,一個定時任務就完成了,是否是很簡單呢?

下面啓動任務來查看下執行結果,在這裏點擊「執行一次」,而後查詢執行日誌,結果以下圖:

ae2a5f596cbc4af09924103006cc0db8


執行日誌

能夠看到咱們的任務已經成功執行了,至此,Spring Boot 集成 XXL-JOB 任務調度平臺就完成了。

總結

Spring Boot 與 XXL-JOB 的集成是否是很簡單呢?在這裏只是簡單地入門,想要了解更多能夠看下官方文檔:https://www.xuxueli.com/xxl-job。

尚未使用過的能夠經過本文快速上手,來實操起來吧!

相關文章
相關標籤/搜索