xxl-job部署在docker-destop,实现定时发送预警信息给指定邮箱

news2025/3/13 13:30:28

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.1
    ports:
      - "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 = 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`),
        KEY `I_jobid_jobgroup` (`job_id`,`job_group`),
        KEY `I_job_id` (`job_id`)
    ) 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;
    
    
    ## —————————————————————— 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;


    @Bean
    public 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.coloradmin.cn/o/2314322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QT】QScrollBar设置样式:圆角、隐藏箭头、上边距等

目录 0.简介 1.原理 2.具体代码 0.简介 环境&#xff1a;Ubuntu22.04、qtDesigner绘制UI 项目需要&#xff0c;按照UI修改滚动条样式&#xff0c;滚动条我使用的是QScrollBar&#xff0c;默认样式和修改之后的样式如下&#xff1a; 1.原理 2.具体代码 我是用qtDesigner绘制…

trae中文版AI搭建完整可用的项目框架

Trae 是由字节跳动推出的 AI 原生集成开发环境&#xff08;AI IDE&#xff09;&#xff0c;号称可以搭建完整项目&#xff0c;个人试用后体验确实比Cursor或cline更便捷&#xff0c;因为他多个文件关联准确率更高。 正式版的trae不支持大陆使用&#xff0c;不过目前已经推出了…

cfi网络安全 网络安全hcip

目录 RIP (路由信息协议) 算法 开销 版本 开销值的计算方式 RIPV1和RIPV2的区别 RIP的数据包 Request(请求)包 Reponse(应答)包 RIP的特征 周期更新 RIP的计时器 1&#xff0c;周期更新计时器 2&#xff0c;失效计时器 3&#xff0c;垃圾回收计时器 RIP的核心思…

Banana Pi 与瑞萨电子携手共同推动开源创新:BPI-AI2N

2025年3月11日&#xff0c; Banana Pi 开源硬件平台很高兴宣布&#xff0c;与全球知名半导体解决方案供应商瑞萨电子&#xff08;Renesas Electronics&#xff09;正式达成技术合作关系。此次合作标志着双方将在开源技术、嵌入式系统和物联网等领域展开深度合作&#xff0c;为全…

linux 命令 ls

ls 是 Linux 系统中用于列出目录内容的核心命令&#xff0c;几乎所有日常操作都会用到。以下是其详细用法和常见场景说明 1. 基础语法 ls [选项] [目录/文件] 不指定目录时&#xff0c;默认列出当前目录的内容。 可以指定文件或目录路径&#xff0c;支持通配符&#xff08;如…

C#-扩展方法-Linq

密封类 sealed&#xff0c;无法被继承 var 可以定义匿名对象 static void test1() {var t 1;t "jack";//报错&#xff0c;类型已经确定好了var s new{id 1,name "tom"};Console.WriteLine(s.id s.name); } 扩展方法 对现有类型做方法的扩展&am…

Go红队开发—web网络编程

文章目录 web网络编程Req快速请求 调试DevModeDebugLogTraceInfo瓶颈分析 控制请求与响应控制请求的字段内容控制调试打印的内容分开dump请求与响应部分请求体设置 作用范围级别设置参数查询URL 路径参数表单请求设置请求头设置 判断响应状态码解析数据SetSuccessResultgjson响…

轻量级模块化前端框架:快速构建强大的Web界面

轻量级模块化前端框架&#xff1a;快速构建强大的Web界面 在当今快节奏的Web开发环境中&#xff0c;选择一个高效且灵活的前端框架至关重要。UIkit 是一个轻量级的模块化前端框架&#xff0c;旨在帮助开发者快速构建功能强大且响应迅速的Web界面。 UIkit提供了丰富的组件和工…

qt+opengl 播放yuv视频

一、实现效果 二、pro文件 Qt widgets opengl 三、主要代码 #include "glwidget.h"GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) {connect(&m_timer, &QTimer::timeout, this,[&](){this->update();});m_timer.start(1000/33); }v…

5G基本概念

作者:私语茶馆 1. 5G应用场景概述 1.1.5G应用场景 ITU域2015年定义了三大应用场景:eMBB(增强型移动宽带)、uRLLC(低时延高可靠通信)、mMTC(海量物联网通信); emBB:Enhanced Mobile Broadband ,移动互联网应用,是4G MBB(移动宽带)的升级,主要侧重于网络速率、带…

PH热榜 | 2025-03-12

1. Fluently 标语&#xff1a;开始说英语&#xff0c;就像说你的母语一样流利。 介绍&#xff1a;想象一下&#xff0c;有一个像人类一样的英语教练&#xff0c;全天候在线、价格却便宜15倍。这就是 Fluently &#x1f680; 纠正你的错误&#xff0c;提升你的词汇量、发音和语…

Python Web项目的服务器部署

一.部署运行 1.虚拟环境的安装&#xff1a;&#xff08;一行一行运行&#xff09; wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh bash miniconda.sh -b -p /opt/miniconda3 echo export PATH"/opt/miniconda3/bin:$PAT…

[项目]基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆

基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆 一.摇杆数据的扫描二.处理摇杆数据三.微调按键处理 一.摇杆数据的扫描 下面摇杆初始化时&#xff0c;启动了ADC-DMA进行了采集&#xff0c;已经开始转换直接将数据通过DMA存入buff数组中&#xff1a; static uint16_t buff[4] …

附下载 | 2024 OWASP Top 10 基础设施安全风险.pdf

《2024 OWASP Top 10 基础设施安全风险》报告&#xff0c;由OWASP&#xff08;开放网络应用安全项目&#xff09;发布&#xff0c;旨在提升企业和组织对基础设施安全风险、威胁与漏洞的意识&#xff0c;并提供高质量的信息和最佳实践建议。报告列出了2024年最重要的10大基础设施…

Pytorch的一小步,昇腾芯片的一大步

Pytorch的一小步&#xff0c;昇腾芯片的一大步 相信在AI圈的人多多少少都看到了最近的信息&#xff1a;PyTorch最新2.1版本宣布支持华为昇腾芯片&#xff01; 1、 发生了什么事儿&#xff1f; 在2023年10月4日PyTorch 2.1版本的发布博客上&#xff0c;PyTorch介绍的beta版本…

化工厂防爆气象站:为石油化工、天然气等领域提供安全保障

【TH-FB02】在石油化工、天然气等高危行业中&#xff0c;安全生产是至关重要的。这些行业常常面临着易燃易爆、有毒有害等潜在风险&#xff0c;因此&#xff0c;对气象条件的监测和预警显得尤为重要。化工厂防爆气象站作为一种专门设计用于这些特殊环境的气象监测设备&#xff…

《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文

目录 一、什么数据可以表示成一张图 &#xff08;1&#xff09;什么是图&#xff1f; &#xff08;2&#xff09;如何表示图的属性 &#xff08;3&#xff09;images as graphs&#xff08;将图片表示为图&#xff09; &#xff08;4&#xff09;text as graphs&#xff08…

[023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级

SpringCloud学习大纲 一、需求说明&#xff1a; 需求1&#xff1a;通过fallback属性进行统一配置 a.问题分析&#xff1a; 1.需要实现cloudalibaba-consumer-nacos-order83模块通过OpenFeign调用cloudalibaba-provider-payment9001 83服务通过OpenFeign调用 9001微服务&…

设计模式-结构型模式-装饰器模式

概述 装饰器模式 : Decorator Pattern : 是一种结构型设计模式. 作用 &#xff1a; 允许你动态地给对象添加功能或职责&#xff0c;而无需修改其原始类的代码,非常的符合 开闭原则。 实现思路 &#xff1a;通过创建一个包装对象&#xff08;即装饰器&#xff09;&#xff0c;来…

visual studio配置opencv

文章目录 step1 下载opencvstep2 配置包含目录step 3 配置链接器step4 配置环境变量并重启vs2022step5 检查代码 step1 下载opencv 下载 opencv-4.8.0-windows.exe https://cloud.189.cn/web/share?codefUnqEb7naUra step2 配置包含目录 step 3 配置链接器 step4 配置环境变…