xxl-job部署在docker-destop,實現定時發送預警信息給指定郵箱

XXL-JOB

?XXL-JOB是一個分布式任務調度平臺(XXL是作者徐雪里姓名拼音的首字母),其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。

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

源碼結構:

系統架構

在xxl-job中,有2個角色:

  • xxl-job-admin調度中心
    統一管理任務調度平臺上的調度任務,負責觸發調度執行,并且提供任務管理平臺。

  • xxl-job-executor執行器
    執行器通常是我們的業務系統,如示例中的springboot項目。

  • xxl-job就是一個中心化管理系統,系統主要通過MySQL管理各種定時任務信息,當到了定時任務的觸發時間,就把任務信息從數據庫中拉進內存,對任務執行器發起調度請求。

1.首先拉取xxl-job鏡像

docker run --restart=always --privileged=true -e PARAMS="--spring.datasource.username=root --spring.datasource.password=123456--spring.datasource.url=jdbc:mysql://192.168.2.3:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8040:8080 -v /usr/local/docker/xxl-job/logs:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.4.0

注意所連接的數據庫xxl_job的權限要為%,并且允許所有ip連接

檢查C:\ProgramData\MySQL\MySQL Server 8.0的my.ini文件

也可以通過docker-compose.yml文件拉取

version: '3.3'
services:xxl-job-admin:image: xuxueli/xxl-job-admin:2.4.1ports:- "8040:8080"environment:PARAMS: '--spring.datasource.url=jdbc:mysql://192.168.2.3:3306/xxl_job?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true--spring.datasource.username=root--spring.datasource.password=123456--xxl.job.accessToken=xxl-job'volumes:- ./logs:/data/applogs

配置調度中心

  1. 初始化數據庫

    #
    # 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 = InnoDBDEFAULT 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`),KEY `I_jobid_jobgroup` (`job_id`,`job_group`),KEY `I_job_id` (`job_id`)
    ) ENGINE = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT CHARSET = utf8mb4;CREATE TABLE `xxl_job_lock`
    (`lock_name` varchar(50) NOT NULL COMMENT '鎖名稱',PRIMARY KEY (`lock_name`)
    ) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;## —————————————————————— init data ——————————————————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;
    
表名作用
xxl_job_group執行器信息表:維護任務執行器信息
xxl_job_info調度擴展信息表:用于保存xxl-job調度任務的擴展信息,如任務分組、任務名、機器地址、執行器、執行入參和報警郵件等等
xxl_job_lock任務調度鎖表
xxl_job_log調度日志表:用于保存xxl-job調度任務的歷史信息,如調度結果、執行結果、調度入參、調度機器和執行器等等
xxl_job_log_report調度日志報表:用戶存儲xxl-job任務調度日志的報表,調度中心報表功能頁面會用到
xxl_job_logglue任務GLUE日志:用于保存GLUE更新歷史,用于支持GLUE的版本回溯功能
xxl_job_registry執行器注冊表:維護在線的執行器和調度中心機器地址信息
xxl_job_user系統用戶表

調度中心支持集群部署,集群情況下各節點務必連接同一個mysql實例;如果mysql做主從,調度中心集群節點務必強制走主庫。

在docker destop中啟動xxl-job容器

訪問調度中心:http://192.168.2.3:8040/xxl-job-admin/joblog

初始登錄賬號密碼為:admin/123456

2.springboot整合xxljob

導入依賴

 <!-- pom.xml --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.0</version></dependency>

編寫application.properties文件,引入調度中心配置

# 調度中心地址配置
xxl.job.admin.addresses=http://192.168.2.3:8040/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=xxl-job### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### 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 server-info
xxl.job.executor.ip=
xxl.job.executor.port=9991
### xxl-job executor log-path
xxl.job.executor.logpath=
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30

編寫XxlJobConfig配置文件:

@Configuration
@Slf4j
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.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;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {log.info(">>>>>>>>>>> xxl-job config init.");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;}
}

編寫定時任務類

啟動項目可看到執行器已經自動注冊到調度中心

新建定時任務

操作

測試成功:

示例源碼地址:店鋪營業額預警模塊(發送郵件): 店鋪營業額預警模塊(發送郵件給老板)

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

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

相關文章

大數據學習(63)- Zookeeper詳解

&&大數據學習&& &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 用力所能及&#xff0c;改變世界。 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一下博主哦&#x1f91e; &#x1f…

【數據結構】3順序表

0 章節 &#xff12;&#xff0e;&#xff11;到&#xff12;&#xff0e;&#xff13;小節。 理解與表達線性表的邏輯結構&#xff1b; 線性表的結構、結構與操作&#xff1b; 順序表的表示與實現&#xff1b;順序表應用&#xff1b; 重點 線性表概念、順序表定義運算與實現&a…

CUDA編程之OpenCV與CUDA結合使用

OpenCV與CUDA的結合使用可顯著提升圖像處理性能。 一、版本匹配與環境配置 CUDA與OpenCV版本兼容性? OpenCV各版本對CUDA的支持存在差異&#xff0c;例如OpenCV 4.5.4需搭配CUDA 10.0?2&#xff0c;而較新的OpenCV 4.8.0需使用更高版本CUDA?。 需注意部分模塊&#xff08;…

WPF從初學者到專家:實戰項目經驗分享與總結

WPF從初學者到專家&#xff1a;實戰項目經驗分享與總結 一、前言二、WPF 基礎概念與入門2.1 什么是 WPF2.2 XAML 基礎2.3 數據綁定基礎 三、第一個 WPF 項目&#xff1a;簡單的待辦事項列表3.1 項目需求分析3.2 項目搭建與界面設計3.3 業務邏輯實現 四、中級項目&#xff1a;音…

一學就會的深度學習基礎指令及操作步驟(3)模型訓練驗證

文章目錄 模型訓練驗證損失函數和優化器模型優化訓練函數驗證函數模型保存 模型訓練驗證 損失函數和優化器 loss_function nn.CrossEntropyLoss() # 損失函數 optimizer Adam(model.parameters()) # 優化器&#xff0c;優化參數模型優化 獲得模型所有的可訓練參數&#x…

Spring Boot 注解大全:全面解析與實戰應用

目錄 一、Spring Boot 啟動與配置相關注解 1.1 SpringBootApplication 1.2 EnableAutoConfiguration 1.3 Configuration 1.4 ComponentScan 二、依賴注入與組件管理注解 2.1 Component 2.2 Service 2.3 Repository 2.4 Controller 2.5 RestController 2.6 Autowired…

【語料數據爬蟲】Python爬蟲|批量采集征集意見稿數據(1)

前言 本文是該專欄的第5篇,后面會持續分享Python爬蟲采集各種語料數據的的干貨知識,值得關注。 在本文中,筆者將主要來介紹基于Python,來實現批量采集“征集意見稿”數據。同時,本文也是采集“征集意見稿”數據系列的第1篇。 采集相關數據的具體細節部分以及詳細思路邏輯…

企業招聘能力提升之道:突破困境,精準納才

企業招聘能力提升之道&#xff1a;突破困境&#xff0c;精準納才 在企業運營的廣袤版圖中&#xff0c;招聘工作無疑是一塊至關重要的拼圖。然而&#xff0c;不少企業在這片領域中舉步維艱&#xff0c;盡管投入了海量的時間與精力&#xff0c;收獲的成果卻不盡人意。面試環節仿…

AI對前端開發的沖擊

Cursor cursor新版本0.46版本號中有部分是改成了新布局其實 Agent 和 Edit 和 Composer 是一樣的&#xff0c;為了方便大家使用&#xff0c;我們把它們合并了&#xff0c;Edit 相當于普通模式下的 Composer&#xff0c;Agent 就是代理模式。 快捷鍵ctrli、ctrll、ctrlk 4o適合…

java中如何把json轉化的字符串再轉化成json格式

使用org.json庫 首先&#xff0c;確保你的項目中已經包含了org.json庫。如果你使用Maven&#xff0c;可以在pom.xml中添加以下依賴&#xff1a; <dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20210307…

泛型、泛型上限、泛型下限、泛型通配符

DAY8.1 Java核心基礎 泛型 Generics 是指在類定義時不指定類中信息的具體數據類型&#xff0c;而是用一個標識符來代替&#xff0c;當外部實例化對象時再指定具體的數據類型。 在定義類或者接口時不明確指定類中信息的具體數據類型&#xff0c;在實例化時再來指定具體的數據類…

Win10 下搭建免費的 FTP 服務器 FileZilla

一、概述 FileZilla 服務器是一個免費的開源FTP和FTPS服務器&#xff0c;是根據GNU通用公共許可證條款免費發布的開源軟件。FileZilla支持FTP、FTPS、SFTP等文件傳輸協議&#xff0c;相比其他FTP服務器&#xff0c;最大的優勢是FileZilla自由(免費)。 FileZilla的官網地址是&a…

C/C++中對字符處理的常用函數

C語言中的 ctype.h 頭文件提供了一系列字符分類和轉換函數&#xff0c;用于高效處理字符相關操作。這些函數通過接受 int 類型參數&#xff08;需為 unsigned char 或 EOF &#xff08;-1&#xff09;值&#xff09;&#xff0c;返回非零值表示條件正確&#xff0c;返回0表示錯…

雙指針算法介紹+算法練習(2025)

一、介紹雙指針算法 雙指針&#xff08;或稱為雙索引&#xff09;算法是一種高效的算法技巧&#xff0c;常用于處理數組或鏈表等線性數據結構。它通過使用兩個指針來遍歷數據&#xff0c;從而減少時間復雜度&#xff0c;避免使用嵌套循環。雙指針算法在解決諸如查找、排序、去重…

【每日八股】計算機網絡篇(四):HTTP

目錄 HTTP 與 HTTPS 的區別&#xff1f;HTTPS 加密與認證的過程&#xff1f;ClientHelloServerHello客戶端回應服務端回應 HTTPS 一定安全可靠嗎&#xff1f;HTTPS 狀態碼的含義&#xff1f;HTTP 緩存有哪些實現方式&#xff1f;HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的區…

TMS320F28P550SJ9學習筆記10:軟件模擬I2C通信_驅動1.3寸OLED

現在有了具體的I2C通信器件&#xff0c;一塊1.3寸OLED屏幕&#xff0c;今日嘗試移植配置一下: 本文主要講的是&#xff0c;使用軟件模擬I2C通信 文章提供測試代碼講解、完整工程下載、測試效果圖 目錄 前置文章&#xff1a; I2C通信引腳&#xff1a; 軟件I2C 引腳的初始化&am…

spring boot 發送郵件驗證碼

一、前置需求 1、準備郵箱 2、登錄授權碼 qq郵箱在–>設置–>賬號POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務 開啟服務 二、發送郵件 1、簡單郵件 包含郵件標題、郵件正文 2、引入mail啟動器 <dependency><groupId>org.springframework.boot</groupI…

塔能科技:智能機箱,為城市安防 “智” 造堅實堡壘

在當今智慧城市建設的浪潮中&#xff0c;城市安防面臨著諸多挑戰。設備管理難&#xff0c;眾多分散的安防設備猶如一盤散沙&#xff0c;難以實現高效統一的管控&#xff1b;數據傳輸不穩定&#xff0c;關鍵時刻信息的延遲或丟失&#xff0c;可能導致嚴重后果。這些問題嚴重制約…

電商數據分析 電商平臺銷售數據分析 電商平臺數據庫設計 揭秘電商怎么做數據分析

《電商參謀數據分析平臺方案》&#xff08;28頁PPT&#xff09;是一套為電商行業量身定制的一體化解決方案&#xff0c;它通過全鏈路打通從數據獲取到分析的全過程&#xff0c;幫助電商企業實現精細化運營和市場機會的挖掘。該方案針對電商行業在數據獲取、加工整合及業務賦能方…

uniapp uview 1.0 跨域h5配置多個代理、如何請求接口

參考文章&#xff1a;uniapp uView1.0跨域h5配置多個代理 官方手冊&#xff1a;http 請求 項目中使用&#xff1a; 參考其他博主的文章是在manifest.json中配置代理&#xff0c;但在官方的手冊中是直接在script請求的&#xff0c;我嘗試請求了下沒問題&#xff0c;上線后也不…