xxl-job 簡單的入門到實戰

本文是參考官方文檔自己實踐一次,純享版,大致也是作者邊寫博客邊去跟著官方文檔實現

?一、前期準備

1、官網地址

  • GitHub地址:

GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任務調度平臺XXL-JOB)A distributed task scheduling framework.(分布式任務調度平臺XXL-JOB) - xuxueli/xxl-jobicon-default.png?t=O83Ahttps://github.com/xuxueli/xxl-job

  • 文檔地址:

分布式任務調度平臺XXL-JOBXXL-JOB是一個輕量級分布式任務調度平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線,開箱即用。icon-default.png?t=O83Ahttps://www.xuxueli.com/xxl-job/#%E4%B8%80%E3%80%81%E7%AE%80%E4%BB%8B來到官網GitHub地址克隆xxl-job項目:

git clone https://github.com/xuxueli/xxl-job.git

2、最新版本需要的環境

  • Maven3+
  • Jdk1.8+
  • Mysql8.0+

3、目前最新依賴

https://mvnrepository.com/artifact/com.xuxueli/xxl-job-coreicon-default.png?t=O83Ahttps://mvnrepository.com/artifact/com.xuxueli/xxl-job-core

<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.2</version>
</dependency>

二、快速入門

1、初始化“調度數據庫”

可以從官方文檔的指導中找到對應數據庫信息,官網其他信息也需要注意一下:

下面我給出這里的sql,僅作參考:

#
# XXL-JOB
# Copyright (c) 2015-present, xuxueli.CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;SET NAMES utf8mb4;CREATE TABLE `xxl_job_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '執行器主鍵ID',`job_desc` varchar(255) NOT NULL,`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`author` varchar(64) DEFAULT NULL COMMENT '作者',`alarm_email` varchar(255) DEFAULT NULL COMMENT '報警郵件',`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '調度類型',`schedule_conf` varchar(128) DEFAULT NULL COMMENT '調度配置,值含義取決于調度類型',`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '調度過期策略',`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '執行器路由策略',`executor_handler` varchar(255) DEFAULT NULL COMMENT '執行器任務handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '執行器任務參數',`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞處理策略',`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任務執行超時時間,單位秒',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數',`glue_type` varchar(50) NOT NULL COMMENT 'GLUE類型',`glue_source` mediumtext COMMENT 'GLUE源代碼',`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE備注',`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新時間',`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任務ID,多個逗號分隔',`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '調度狀態:0-停止,1-運行',`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次調度時間',`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次調度時間',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '執行器主鍵ID',`job_id` int(11) NOT NULL COMMENT '任務,主鍵ID',`executor_address` varchar(255) DEFAULT NULL COMMENT '執行器地址,本次執行的地址',`executor_handler` varchar(255) DEFAULT NULL COMMENT '執行器任務handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '執行器任務參數',`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '執行器任務分片參數,格式如 1/2',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數',`trigger_time` datetime DEFAULT NULL COMMENT '調度-時間',`trigger_code` int(11) NOT NULL COMMENT '調度-結果',`trigger_msg` text COMMENT '調度-日志',`handle_time` datetime DEFAULT NULL COMMENT '執行-時間',`handle_code` int(11) NOT NULL COMMENT '執行-狀態',`handle_msg` text COMMENT '執行-日志',`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警狀態:0-默認、1-無需告警、2-告警成功、3-告警失敗',PRIMARY KEY (`id`),KEY `I_trigger_time` (`trigger_time`),KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log_report` (`id` int(11) NOT NULL AUTO_INCREMENT,`trigger_day` datetime DEFAULT NULL COMMENT '調度-時間',`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '運行中-日志數量',`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '執行成功-日志數量',`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '執行失敗-日志數量',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_logglue` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_id` int(11) NOT NULL COMMENT '任務,主鍵ID',`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE類型',`glue_source` mediumtext COMMENT 'GLUE源代碼',`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE備注',`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_registry` (`id` int(11) NOT NULL AUTO_INCREMENT,`registry_group` varchar(50) NOT NULL,`registry_key` varchar(255) NOT NULL,`registry_value` varchar(255) NOT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_group` (`id` int(11) NOT NULL AUTO_INCREMENT,`app_name` varchar(64) NOT NULL COMMENT '執行器AppName',`title` varchar(12) NOT NULL COMMENT '執行器名稱',`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '執行器地址類型:0=自動注冊、1=手動錄入',`address_list` text COMMENT '執行器地址列表,多地址逗號分隔',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL COMMENT '賬號',`password` varchar(50) NOT NULL COMMENT '密碼',`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用戶、1-管理員',`permission` varchar(255) DEFAULT NULL COMMENT '權限:執行器ID列表,多個逗號分割',PRIMARY KEY (`id`),UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_lock` (`lock_name` varchar(50) NOT NULL COMMENT '鎖名稱',PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例執行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '測試任務1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代碼初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');commit;

執行sql:

2、編譯源碼

各個模塊詳情如下:

3、配置部署“調度中心”

  1. 調度中心項目:xxl-job-admin
  2. 作用:統一管理任務調度平臺上調度任務,負責觸發調度執行,并且提供任務管理平臺。
調度中心配置:

上面這些信息修改和自己的一致,其中配置信息里面下面兩個是需要修改的,端口自定義修改:

### web
server.port=8010
server.servlet.context-path=/xxl-job-admin### actuator
management.server.base-path=/actuator
management.health.mail.enabled=false### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.web.resources.static-locations=classpath:/static/
啟動項目測試:

修改完成后可以啟動項目:

訪問下面網址查看是否成功:

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

默認賬號密碼為:

賬號:admin

密碼:123456

成功登錄管理端網頁!

服務器部署:

如果需要部署到服務器需要將此項目打包,然后部署到服務器上面,這里我是使用寶塔進行項目部署,參考下面操作:

部署到服務器需要開啟對應的端口,端口和上面你的配置文件的配置有關,還需要初始化數據庫,這里我就不演示了。

打包項目還是這幾個步驟:

隨便放在服務器一個目錄:

寶塔部署比較方便,如果想知道比較詳細的部署可以看完之前的博客,下面報了個錯:

Failed to create parent directories for [/data/applogs/xxl-job/xxl-job-admin.log]

看了一些博客好像說是根目錄是不能創建目錄的,所以下面修改一下項目的配置

./data/applogs/xxl-job/xxl-job-admin.log

加一個./ ,重新部署

啟動成功,訪問客戶端:

http://ip:8011/xxl-job-admin/

至此“調度中心”項目已經部署成功。

測試執行器:

下面只是測試,如果希望直接實戰可以跳到業務代碼改造那邊

注意配置文件,這個也是很重要的:

1.本地測試

執行器就是設置定時任務的地方,這里我們使用官方文檔提供的一個springboot執行器案例去測試:

運行該項目,在admin控制臺可以看到:

進入任務管理,編輯任務,下面有個默認的任務,對應的是官方代碼里面的一個定時任務,注意保證項目中@XxlJob注解里面的值和admin里面保持一致才能正常使用項目的定時任務,如果需要添加定時任務,只需要在admin控制臺中繼續添加任務,注意和代碼中@XxlJob的值保持一致。

開始執行一次測試

由于我們的執行器目前只注冊了一個,默認從執行器管理中獲取,所以不填也沒事,但是如果你有多個執行器,就去配置一下,因為xxl-job是一個分布式的定時任務管理,可以有很多執行器。

以上是本地測試,admin也是本地的,如果是服務器測試的話,也需要把測試項目部署上去,然后

注意修改下面配置信息,和之前admin一個原理:

2.服務器測試

保證機器地址正確,然后進行測試:

注意不要使用服務器的admin測試本地的執行器,否則就會報錯。

三、業務代碼改造

其實這里的原理和測試執行器原理是一樣的,無非就是把執行器關鍵配置信息放在業務代碼中

1、項目中加入依賴

<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.2</version>
</dependency>

2、拷貝修改配置文件

這里我將這些配置配置在yml中

xxl:job:# xxl_job_admin配置admin:addresses: http://???ip:8011/xxl-job-admin# 認證tokenaccessToken: default_token# 執行器executor:### xxl-job executor appnameappname: xxl-job-executor-quick### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is nulladdress:### xxl-job executor server-infoip:port: 9999### xxl-job executor log-pathlogpath: ./data/applogs/xxl-job/jobhandler### xxl-job executor log-retention-dayslogretentiondays: 30

3、將config拷貝到項目中

4、新建定時任務測試類來測試

package com.quick.task;import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;/*** @program: quick-pick* @description: 測試定時任務類* @author: bluefoxyu* @date: 2024-12-25 22:12**/
@Component
public class testTask {/*** <p>* description: xxl-job第一個測試案例* </p>** @return: void* @author: bluefoxyu* @date: 2024-12-25 22:13:20*/@XxlJob(value = "testFirstTask")public void testFirstTask(){XxlJobHelper.log("定時任務執行了" + LocalDateTime.now());}}

5、去xxl-job-admin上執行器管理上新增執行器

http://服務器ip:8011/xxl-job-admin/

6、新增定時任務進行一次測試

執行一次任務:

至此,定時任務測試成功!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64024.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Centos7, 使用yum工具,出現 Could not resolve host: mirrorlist.centos.org

在 CentOS 7 中使用 yum 工具時&#xff0c;如果出現 "Could not resolve host: mirrorlist.centos.org" 的錯誤&#xff0c;通常是因為默認的鏡像源無法訪問。以下是一些常用的解決方法&#xff1a; 檢查網絡連接&#xff1a;首先使用 ping 命令測試網絡連接是否正常…

【教程】通過Docker運行AnythingLLM

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 官方教程&#xff1a;Local Docker Installation ~ AnythingLLM 1、先創建一個目錄用于保存anythingllm的持久化文件&#xff1a; sudo mkdir /app su…

若依(RuoYi-Vue)+Flowable工作流前后端整合教程

此教程適合若依前后端分離項目&#xff0c;其他項目可以在擴展列表中進行查找。 近期公司里需要對很久以前的RuoYi-Vue前后端分離項目擴展出flowable的功能&#xff0c;當然這個重任也是落在了我的身上&#xff08;不然也不會有這篇文章&#xff09;&#xff0c;然后我在官網看…

ubuntu 網絡管理--NetworkManager

ubuntu 網絡管理--NetworkManager 1 介紹2 NetworkManager 命令2 nmcli 命令顯示可用的wifi AP連接wifi檢查網絡連接 ?? 如何刪除刪除網絡連接查看設備狀態添加一個新的以太網連接設置靜態 IP 地址啟用并測試連接添加新的wifi連接 3 其他命令參考 1 介紹 NetworkManager 是標…

計算機網絡習題(第5章 網絡層 第6章 傳輸層)

第5章 網絡層 一、單選題 1、下列關于 IPv4 地址的說法中&#xff0c;錯誤的是( )。 A、 IP 地址是邏輯地址 B、 IP 地址一般用點分十進制表示 C、 205.106.286.36 是一個合法的 IP 地址 D、 同一個網絡中不能有兩臺計算機的 IP 地址相同 正確答案&#xff1a; C 2、…

水庫大壩三維模型的開發和使用3Dmax篇

成果圖 開發過程 工具插件three.js先加載模型做水體銜接水位測量標尺水位標記斷面標記大壩監測點打點 上代碼&#xff0c;技術交流V: bloxed <template><div class"box w100 h100"><el-row :gutter"20" v-loading"loading"e…

【藍橋杯每日一題】分糖果——DFS

分糖果 藍橋杯每日一題 2024-12-24 分糖果 DFS 題目描述 兩種糖果分別有 9 個和 16 個&#xff0c;要全部分給 7 個小朋友&#xff0c;每個小朋友得到的糖果總數最少為 2 個最多為 5 個&#xff0c;問有多少種不同的分法。糖果必須全部分完。 只要有其中一個小朋友在兩種方案中…

計算機畢設-基于springboot的校園招聘網站的設計與實現(附源碼+lw+ppt+開題報告)

博主介紹&#xff1a;?多個項目實戰經驗、多個大型網購商城開發經驗、在某機構指導學員上千名、專注于本行業領域? 技術范圍&#xff1a;Java實戰項目、Python實戰項目、微信小程序/安卓實戰項目、爬蟲大數據實戰項目、Nodejs實戰項目、PHP實戰項目、.NET實戰項目、Golang實戰…

重生之我在異世界學編程之C語言:深入動態內存管理收尾 + 柔性數組篇

大家好&#xff0c;這里是小編的博客頻道 小編的博客&#xff1a;就愛學編程 很高興在CSDN這個大家庭與大家相識&#xff0c;希望能在這里與大家共同進步&#xff0c;共同收獲更好的自己&#xff01;&#xff01;&#xff01; 本文目錄 引言正文常見的動態內存管理錯誤&#xf…

無人直播源碼

DY無人直播系統架構設計介紹 在DY等短視頻平臺的直播中&#xff0c;無人直播系統能夠提供自動化、智能化的互動體驗&#xff0c;既減輕了主播的工作量&#xff0c;又提升了觀眾的參與感。以下是一個典型的無人直播系統架構設計&#xff0c;包含全局配置、點對點互動、產品話術、…

被裁20240927 --- 嵌入式硬件開發 前篇

前篇主要介紹一些相關的概念&#xff0c;用于常識掃盲&#xff0c;后篇開始上干貨&#xff01; 他捧著一只碗吃過百家的飯 1. 處理器芯片1.1 處理器芯片制造商一、 英特爾&#xff08;Intel&#xff09;二、 三星&#xff08;SAMSUNG&#xff09;三、 高通&#xff08;Qualcomm…

準備考試:解決大學入學考試問題

引言 在編程競賽和算法挑戰中&#xff0c;我們經常會遇到各種類型的組合問題。這些問題不僅考驗我們的邏輯思維能力&#xff0c;還要求我們熟練掌握數據結構和算法。在這篇文章中&#xff0c;我們將探討一個有趣的問題——“準備考試”&#xff0c;這個問題來自于一個虛構的情…

【Linux】進程間通信 -> 匿名管道命名管道

進程間通信的目的 數據傳輸&#xff1a;一個進程許需要將它的數據發送給另外一個進程。資源共享&#xff1a;多個進程之間共享同樣的資源。通知事件&#xff1a;一個進程需要向另一個或一組進程發送消息&#xff0c;通知它們發生了某種事件&#xff08;如進程終止時要通知父進程…

Pytorch注意力機制應用到具體網絡方法(閉眼都會版)

文章目錄 以YoloV4-tiny為例要加入的注意力機制代碼模型中插入注意力機制 以YoloV4-tiny為例 解釋一下各個部分&#xff1a; 最左邊這部分為主干提取網絡&#xff0c;功能為特征提取中間這邊部分為FPN&#xff0c;功能是加強特征提取最后一部分為yolo head&#xff0c;功能為獲…

修改el-select下拉框高度;更新:支持動態修改

文章目錄 效果動態修改&#xff1a;效果代碼固定高度版本動態修改高度版本&#xff08;2024-12-25 更新&#xff1a; 支持動態修改下拉框高度&#xff09; 效果 動態修改&#xff1a;效果 代碼 固定高度版本 注意點&#xff1a; popper-class 盡量獨一無二&#xff0c;防止影…

開關電源特點、分類、工作方式

什么叫開關電源隨著電力電子技術的發展和創新&#xff0c;使得開關電源技術也在不斷地創新。目前&#xff0c;開關電源以小型、輕量和高效率的特點被廣泛應用幾乎所有的電子設備&#xff0c;是當今電子信息產業飛速發展不可缺少的一種電源方式。 開關電源是利用現代電力電子技…

Linux應用軟件編程-文件操作(目錄io)

1.打開目錄&#xff1a; DIR *opendir(const char *name); 功能&#xff1a;打開一個目錄獲得一個目錄流指針 參數: name:目錄名 返回值&#xff1a;成功返回目錄流指針&#xff1b;失敗返回NULL 2.讀目錄&#xff1a; struct dirent *readdir(DIR *dirp); 功能&…

有哪些開發者模式?

1、單例開發模式&#xff08;Singleton Pattern&#xff09; 單例模式是一種創建型設計模式&#xff0c;目的是確保在程序運行期間&#xff0c;某個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。 核心特點 唯一實例&#xff1a;一個類只能創建一個對象實例。…

如何完全剔除對Eureka的依賴,報錯Cannot execute request on any known server

【現象】 程序運行報錯如下&#xff1a; com.netflix.discovery.shared.transport.TransportException報錯Cannot execute request on any known server 【解決方案】 &#xff08;1&#xff09;在Maven工程中的pom去掉Eureka相關的引用&#xff08;注釋以下部分&#xff0…

vscode寫python,遇到問題:ModuleNotFoundError: No module named ‘pillow‘(已解決 避坑)

1 問題&#xff1a; ModuleNotFoundError: No module named pillow 2 原因&#xff1a; 原因1&#xff1a;安裝Pillow的pip命令所處的python版本與vscode調用的python解釋器版本不同。 如&#xff1a; 原因2&#xff1a;雖然用的是pillow&#xff0c;但是寫代碼的時候只能用…