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.mzph.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;上线后也不…