分布式任務調度平臺-XXL-JOB實戰圖文代碼詳解

2020-09-16 小碾房

作者:墨語


前段時間項目上需要用到任務調度,對比了Quartz的不足與XXL-JOB優缺點,整體上:XXL-JOB比Quartz更輕量化,更易上手,還具有可視化界面以及在任務調度、日誌管理、彈性擴容縮容、執行器HA(分布式)、郵件報警、運行報表、全異步、跨平臺、國際化、容器化、線程池隔離等方面更加人性化。


一、源碼下載地址:

下載xxl-job源碼

xxl-job源碼地址:https://github.com/xuxueli/xxl-job

只需要將資料庫配置成自己的,然後生成jar包即可,XXL-JOB的管理器直接通過運行jar包就正常運行;例如:

啟動後效果圖:

運行效果如下:

主頁面:

執行器:

調度日誌:

用戶名密碼在用戶(xxl_job_user)表中;


二、資料庫表創建:

基本支撐的表包括:

有需要建表語句的請關注公眾號後留言即可;


三、集成到項目:

需要本地工程修改的代碼類以及配置文件:XxlJobConfig.java、SampleXxlJob.java、application.properties、logback.xml

核心代碼如下:

XxlJobConfig.java(直接copy到工程即可)

package www.tonghao.com.xxl.job.executor.core.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

* Create by YSOcean

*/

@Configuration

public class XxlJobConfig {

private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

@Value(&34;)

private String adminAddresses;

@Value(&34;)

private String appName;

@Value(&34;)

private String ip;

@Value(&34;)

private int port;

@Value(&34;)

private String accessToken;

@Value(&34;)

private String logPath;

@Value(&34;)

private int logRetentionDays;

// @Bean(initMethod = &34;, destroyMethod = &34;)

@Bean

public XxlJobSpringExecutor xxlJobExecutor() {

logger.info(&34;);

XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();

xxlJobSpringExecutor.setAdminAddresses(adminAddresses);

// xxlJobSpringExecutor.setAddress(address);

xxlJobSpringExecutor.setAppname(appName);

xxlJobSpringExecutor.setIp(ip);

xxlJobSpringExecutor.setPort(port);

xxlJobSpringExecutor.setAccessToken(accessToken);

xxlJobSpringExecutor.setLogPath(logPath);

xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

return xxlJobSpringExecutor;

}

}

SampleXxlJob.java(調度執行類)

package www.tonghao.com.xxl.job.executor.service.jobhandler;

import com.xxl.job.core.biz.model.ReturnT;

import com.xxl.job.core.handler.IJobHandler;

import com.xxl.job.core.handler.annotation.XxlJob;

import com.xxl.job.core.log.XxlJobLogger;

import org.springframework.stereotype.Component;

import www.tonghao.common.utils.SpringUtil;

import www.tonghao.wc.service.WcinOrdersService;

import www.tonghao.wc.web.WcinOrderApiController;

/**

* 任務Handler示例(Bean模式)

*

* 開發步驟:

* 1、繼承&34;:「com.xxl.job.core.handler.IJobHandler」;

* 2、註冊到Spring容器:添加「@Component」註解,被Spring容器掃描為Bean實例;

* 3、註冊到執行器工廠:添加「@JobHandler(value=&34;)」註解,註解value值對應的是調度中心新建任務的JobHandler屬性的值。

* 4、執行日誌:需要通過 &34; 列印執行日誌;

*/

//@JobHandler(value=&34;)

@Component

public class SampleXxlJob extends IJobHandler{

@XxlJob(&34;)

@Override

public ReturnT<String> execute(String s) throws Exception {

XxlJobLogger.log(&34;);

System.out.println(&34;);

//更換即可--start

WcinOrderApiController contr=new WcinOrderApiController();

String msg=contr.getOrder();

//更換即可--end

return SUCCESS;

}

}

logback.xml(直接copy到工程即可)

<?xml version=&34; encoding=&34;?>

<configuration debug=&34; scan=&34; scanPeriod=&34;>

<contextName>logback</contextName>

<property name=&34; value=&34;/>

<appender name=&34; class=&34;>

<encoder>

<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>

</encoder>

</appender>

<appender name=&34; class=&34;>

<file>${log.path}</file>

<rollingPolicy class=&34;>

<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>

</rollingPolicy>

<encoder>

<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n

</pattern>

</encoder>

</appender>

<root level=&34;>

<appender-ref ref=&34;/>

<appender-ref ref=&34;/>

</root>

</configuration>

application.properties(核心配置)

spring.main.web-environment=false

xxl-job admin address list, such as &34; or &34;

xxl.job.admin.addresses=http://127.0.0.1:6081/xxl-job-admin

xxl-job, access token

xxl.job.accessToken=

xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null

xxl.job.executor.address=

xxl.job.executor.ip=127.0.0.1

xxl.job.executor.port=9999

xxl-job executor log-retention-days

xxl.job.executor.logretentiondays=30

至此,XXL-JOB集成到項目,完成;

使用操作的詳細配置,後續會更新,請持續關注!!!

相關焦點

  • 企業中常用的分布式任務調度平臺XXL-JOB
    一:簡介1.1 概述XXL-JOB是一個輕量級分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。啟動/停止任務,以及終止運行中任務,即時生效;調度中心HA(中心式):調度採用中心式設計,「調度中心」基於集群Quartz實現並支持集群部署,可保證調度中心HA;執行器HA(分布式):任務分布式執行,任務"執行器"支持集群部署,可保證任務執行HA;註冊中心: 執行器會周期性自動註冊任務, 調度中心將會自動發現註冊的任務並觸發執行。
  • Spring Boot 集成 XXL-JOB 任務調度平臺
    在開發中需要將已有的定時任務抽離出來,方便管理查看,因此選擇集成分布式任務調度平臺 XXL-JOB,本文就講解下 Spring Boot 如何集成 XXL-JOB 任務調度平臺。XXL-JOB 簡介XXL-JOB是一個分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放原始碼並接入多家公司線上產品線,開箱即用。
  • 比xxl-job 優秀的分布式定時任務調度框架
    簡述簡單的定時任務通過QuartZ可以實現,但隨著業務的增多,需要監控定時任務。QuartZ就無法滿足場景了。很多朋友都了解過xxl-job,這是一款非常優秀的分布式定時任務調度框架。今天給大家帶來的是另一款開源的分布式調度與計算框架。是的不僅僅是任務調度還包含計算。
  • 比xxl-job 優秀的分布式定時任務調度框架
    簡述 簡單的定時任務通過QuartZ可以實現,但隨著業務的增多,需要監控定時任務。QuartZ就無法滿足場景了。很多朋友都了解過xxl-job,這是一款非常優秀的分布式定時任務調度框架。今天給大家帶來的是另一款開源的分布式調度與計算框架。是的不僅僅是任務調度還包含計算。
  • 開發好物推薦6之分布式任務調度平臺xxl-job
    前言分布式開發環境中,任務調度的需求基本是必不可少的。傳統的最佳方案是Quartz。在這種背景下,需要有一個更好的平臺來克服以上缺點,xxl-job應運而生。推薦理由開發迅速、學習簡單、輕量級、易擴展。現已開放原始碼並接入多家公司線上產品線,開箱即用。
  • 三千字帶你搞懂XXL-JOB任務調度平臺
    在Java中,傳統的定時任務實現方案,比如Timer,Quartz等都或多或少存在一些問題:不支持集群、不支持統計、沒有管理平臺、沒有失敗報警、沒有監控等等而且在現在分布式的架構中,有一些場景需要分布式任務調度:
  • 3千字帶你搞懂XXL-JOB任務調度平臺
    二、為什麼需要任務調度平臺在Java中,傳統的定時任務實現方案,比如Timer,Quartz等都或多或少存在一些問題:不支持集群、不支持統計、沒有管理平臺、沒有失敗報警、沒有監控等等而且在現在分布式的架構中
  • 3千字帶你搞懂XXL - JOB任務調度平臺
    而且在現在分布式的架構中,有一些場景需要分布式任務調度:同一個服務多個實例的任務存在互斥時,需要統一的調度。任務調度需要支持高可用、監控、故障告警。需要統一管理和追蹤各個服務節點任務調度的結果,需要記錄保存任務屬性信息等。顯然傳統的定時任務已經不滿足現在的分布式架構,所以需要一個分布式任務調度平臺,目前比較主流的是elasticjob和xxl-job。
  • 分布式調度系統XXL-JOB安裝和簡單使用
    我看了一下 GitHub 上開源的分布式調度系統,目前是 xxl-job 項目是分布式調度開源系統中最多 starts 的(當然也有可能因為這個 xxl-job 出來挺久了)window ,mac 或docker 安裝如果為 window,mac 等安裝,可以先根據github 上的 SQL
  • java分布式任務調度框架分享
    自spring 3.0+以後,spring自帶的任務調度,主要依靠TaskScheduler接口的十幾個實現來來實現的;4.spring結合quartz實現的;5.配合linux的crontabe來實現;在這裡阿里鵬為大家介紹一個分布式任務調度框架-XXL-Job。
  • 笑話:大廠都在用的任務調度框架我能不知道嗎?
    今天給大家新推薦一個任務調度框架,也許很多人聽過甚至目前已經使用了很久。不過沒關係,這也不影響你今天閱讀本文章。這個框架就是 XXL-JOB,一個輕量級分布式任務調度平臺。最近在我的開源項目 Kitty-Cloud 中就採用了 XXL-JOB,還有一個原因是我目前任職的公司也一直在使用 XXL-JOB。
  • 這個任務調度框架太火了,你還不知道嗎?
    這個框架就是 XXL-JOB,一個輕量級分布式任務調度平臺。最近在我的開源項目 Kitty-Cloud 中就採用了 XXL-JOB,還有一個原因是我目前任職的公司也一直在使用 XXL-JOB。XXL-JOB 的前世今生XXL-JOB 是一個分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放原始碼並接入多家公司線上產品線,開箱即用。2015-11 月,XXL-JOB RELEASE 了第一個大版本 V1.0,在後面的幾年裡一直在更新。
  • PowerJob全新一代分布式調度與計算框架
    PowerJob(原OhMyScheduler)是全新一代分布式調度與計算框架,能讓您輕鬆完成作業的調度與繁雜任務的分布式計算。簡介主要特性使用簡單:提供前端Web界面,允許開發者可視化地完成調度任務的管理(增、刪、改、查)、任務運行狀態監控和運行日誌查看等功能。
  • 還在手寫任務調度代碼?試試這款可視化分布式調度框架
    在微服務系統中,經常會有用到任務調度的場景。比如每天定時同步數據、定時生成業務報表、定期清理日誌等。今天給大家推薦一個分布式調度框架,助你你輕鬆完成任務調度工作!PowerJob 簡介PowerJob是全新一代分布式調度與計算框架,能讓你輕鬆完成任務的調度與繁雜任務的分布式計算。
  • 新一代分布式任務調度與計算框架
    PowerJob(原OhMyScheduler)是全新一代分布式調度與計算框架,能讓您輕鬆完成作業的調度與繁雜任務的分布式計算。執行模式豐富:支持單機、廣播、Map、MapReduce四種執行模式,其中Map/MapReduce處理器能使開發者寥寥數行代碼便獲得集群分布式計算的能力。
  • docker安裝xxl-job-admin
    1、下載鏡像docker pull xuxueli/xxl-job-admin:2.2.03、初始化資料庫 Mysql腳本: https://github.com/xuxueli/xxl-job/blob/2.2.0/doc/db/tables_xxl_job.sql4、配置host
  • 一次線上 xxl-job 服務異常排查分析
    問題描述某天收到頻繁的告警郵件,定時任務調度失敗,查看 xxl-job 的執行器列表是空的,但是服務又顯示健康,查看歷史任務執行記錄發現執行器是依次遞減,由於是線上服務,只能先重啟,然後線程日誌也沒有,同事嘗試訪問服務的健康檢查接口,發現健康檢查接口訪問不通,應該是服務已經掛了
  • XXL-JOB 針對未授權訪問導致遠程命令執行漏洞的聲明
    針對此問題,XXL-JOB 作者提供了以下安全防護策略:開啟 XXL-JOB 自帶的鑑權組件:官方文檔中搜索 「xxl.job.accessToken」 ,按照文檔說明啟用即可。埠防護:及時更換默認的執行器埠,不建議直接將默認的 9999 埠開放到公網。
  • 「微服務」 定時任務框架對比
    什麼是集群,分布式定時任務把分散的,可靠性差的計劃任務納入統一的平臺,並實現集群管理調度和分布式部署的一種定時任務的管理方式。叫做分布式定時任務。2.常見開源方案elastic-job , xxl-job ,quartz , saturn, opencron , antares, lts2.1 elastic-jobelastic-job 是由當當網基於
  • SpringBoot2.0實戰(36)整合ElasticJob之快速入門
    Elastic-Job-Lite 定位為輕量級無中心化解決方案,使用jar包的形式提供分布式任務的協調服務;Elastic-Job-Cloud 採用自研 Mesos Framework 的解決方案,額外提供資源治理、應用分發以及進程隔離等功能。