SpringBoot 集成 xxl-job 实现定时任务管理

news2024/11/24 4:13:32

SpringBoot 集成 xxl-job 实现定时任务管理

  • 摘要
  • XXL-Job 优势
  • 集成XXL-Job
    • 操作环境
    • 运行XXL-Job
      • 1. 下载XXL-Job
      • 2. 创建数据库并导入数据
      • 3. 修改数据库连接配置
      • 4. 启动项目
    • 项目集成
      • 1. 导入依赖
      • 2. 配置 application.yml 信息
      • 3. XxlJobConfig 配置类
      • 4. 创建 XxlJobTest 任务测试demo
    • 测试运行
      • 添加执行器
      • 添加任务
      • 执行任务
      • 查看调度日志

在这里插入图片描述

摘要

XXL-Job是一个功能强大的分布式任务调度框架,集成了Spring Boot后能够发挥更大的优势。它提供了分布式任务调度、任务执行报告、任务调度中心、良好的扩展性、分布式集群部署、监控与报警等多种优势。此外,XXL-Job是开源免费的,可以在GitHub上获取源代码和详细文档。详细的文档和使用指南可以在XXL-Job的官方文档中找到。

XXL-Job 优势

当集成XXL-Job和Spring Boot时,XXL-Job的优势包括:

  1. 分布式任务调度:XXL-Job提供了分布式任务调度的能力,可以在多台服务器上同时执行定时、循环、CRON等各类任务。

  2. 任务执行报告:XXL-Job提供了任务执行报告,可以查看任务执行情况、执行日志、任务结果等,方便排查问题和监控任务执行状态。

  3. 任务调度中心:XXL-Job配备了任务调度中心,通过Web界面进行任务配置和管理,支持动态修改任务配置,实现了可视化的管理和操作。

  4. 良好的扩展性:XXL-Job通过编写JobHandler,可以轻松集成各种业务逻辑和任务处理,支持自定义Job开发和管理。

  5. 分布式集群部署:XXL-Job支持分布式集群部署,提供可伸缩性和高可用性,适应大规模和高并发任务调度场景。

  6. 监控与报警:XXL-Job提供丰富的监控指标和报警机制,可以及时发现任务执行异常和错误,并通过邮件、短信等方式进行提醒。

  7. 开源免费:XXL-Job是一个开源项目,可以免费使用并在GitHub上获取源代码和文档。

您可以在 XXL-Job的官方文档 上找到更详细的文档和使用指南。该文档包含XXL-Job的安装部署、任务配置、调度策略、任务执行报告等方面的详细说明和示例代码。

集成XXL-Job

操作环境

  • MAC10.15系统
  • Maven3.8.6
  • Jdk1.8
  • Mysql8.0
  • IDEA2021

运行XXL-Job

1. 下载XXL-Job

参考官方文档,我们需要下载一个xxl-job项目。
Gitee
Github

2. 创建数据库并导入数据

从Gitee上下载下来的源码文件目录 /xxl-job/doc/db 下面有SQL文件 tables_xxl_job.sql ,然后再数据库创建数据库 xxl-job,我这里是和系统默认的一样也可以自己修改数据库名称;然后运行SQL文件导入下面表。
在这里插入图片描述

3. 修改数据库连接配置

数据库连接配置在项目目录 xxl-job-admin/src/main/resources/application.properties ,如果需要配置发送邮箱则需要配置 spring.mail 下所有配置信息。
在这里插入图片描述

4. 启动项目

在IDEA 启动项目后,访问:http://localhost:8080/xxl-job-admin,默认账号:admin,密码:123456
在这里插入图片描述
登录进来后主页:
在这里插入图片描述
后续需要配置执行器和任务都是在这个页面上完成的。

项目集成

1. 导入依赖

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

2. 配置 application.yml 信息

# Xxl-Job分布式定时任务调度中心
xxl:
  job:
    ### 执行器通讯TOKEN [选填]:非空时启用;
    accessToken:
    admin:
      ### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
      addresses: http://127.0.0.1:8080/xxl-job-admin
    executor:
      ### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
      address:
      ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
      appname: ddz-job-executor
      ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
      ip:
      ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 9999
      ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath: /User/ddz/data/applogs/xxl-job/jobhandler
      ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 30

3. XxlJobConfig 配置类

这个配置类在我们下载下来的项目中的目录下:xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java ,我们拷贝过来就能使用了。

@Configuration
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() {
        logger.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;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

4. 创建 XxlJobTest 任务测试demo

@Slf4j
@Component
@RequiredArgsConstructor
public class XxlJobTest {

    @XxlJob("xxlJobTest")
    public ReturnT<String> xxlJobTest(String date) {
        // 获取任务参数
        XxlJobContext xxlJobContext = XxlJobContext.getXxlJobContext();
        String jobParam = xxlJobContext.getJobParam();
        log.info("---------xxlJobTest定时任务执行成功--------{}", jobParam);
        return ReturnT.SUCCESS;
    }
}

测试运行

添加执行器

进入 http://localhost:8080/xxl-job-admin,登录进去。
在这里插入图片描述
我们选择注册方式是自动,有可能添加完成获取不到在线机器;这时候我们只需要重启一下我们自己的项目即可自动获取成功。
在这里插入图片描述

添加任务

在这里插入图片描述

执行任务

我们启动任务后可以在调度日志上查看执行记录。
在这里插入图片描述

查看调度日志

在这里插入图片描述
至此,您的Spring Boot应用程序已经集成了XXL-Job。当配置的触发器满足条件时,xxl-job执行器将会自动调用对应的JobHandler方法进行任务处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722101.html

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

相关文章

qt实现日历和天气显示(QCalendarWidget)

完成展示效果&#xff1a; 本项目主要有QCalendarWidget类和获取天气api 一、QCalendarWidget 关键代码&#xff1a; ui->mCalendarWidget->setHorizontalHeaderFormat(QCalendarWidget :: ShortDayNames);//星期一、二ui->mCalendarWidget->setVerticalHeaderFo…

基于Tars高并发IM系统的设计与实现--进阶篇2

基于Tars高并发IM系统的设计与实现–进阶篇2 消息时序 分为时间和序号 时间 分布式系统中&#xff0c;消息的时间一般都取服务端本地时间戳&#xff0c;一般IM系统服务主机不止一台&#xff0c;每台机器上时间可能会有差异&#xff0c;系统处理也会有延时&#xff0c;时间也…

neo4j删除Property Keys值方法

首先&#xff0c;停止neo4j服务 然后删除安装目录下面databases下面所有文件 重新运行neo4j&#xff0c;发现Property Keys值已经完全清干净了

Docker如何安装Nacos

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

邮件收发原理及部署postfix邮件系统

目录 一、邮件收发原理 1、原理图及名词解释 2、MTA功能介绍 3、POP和IMAP获取邮件介绍 二、部署postfix邮件系统 1、环境准备 2、DNS服务器部署 3、部署Postfix 4、部署Dovecot 三、使用Foxmail测试 1、修改DNS服务器 2、Foxmail登录测试账户 3、发送测试邮件 …

热力图问题

1.python画图怎么使用特殊符号 python画图怎么使用特殊符号&#xff1f;_python中怎么在绘图中加a b c d_sinysama的博客-CSDN博客python画图怎么使用特殊符号_python中怎么在绘图中加a b c dhttps://blog.csdn.net/QAQIknow/article/details/124390075?ops_request_misc%257…

OPPO手机便签怎么设置字体颜色?便签调整字体颜色方法

OPPO是一个非常受年轻人青睐的手机品牌&#xff0c;它的手机不仅外观设计时尚轻薄&#xff0c;而且拍照清晰、系统流畅&#xff0c;并且拥有高中低不同档次的价位可供消费者选择。虽然OPPO手机的使用体验非常不错&#xff0c;但是有一部分用户也遇到了一些问题&#xff0c;例如…

B. Cake Assembly Line - 思维

分析&#xff1a; 推公式&#xff0c;需要每一块蛋糕的范围完全覆盖巧克力范围&#xff0c;假设蛋糕一共移动了距离d&#xff0c;那么则 对于每一个i都有a[i]-wd<b[i]-h<b[i]h<a[i]wd&#xff0c;解得b[i]h-a[i]-w<b[i]-h-a[i]w。只需要判断不等式是否成立就可以求…

平台使用篇 | RflySim飞控底层实验平台配置介绍

本课程提供的实验平台总体可以分成两个部分&#xff1a;硬件平台和软件平台。本讲简要介绍各个部分的基本组成及实验开发流程。 平台使用篇-RflySim飞控底层实验平台配置介绍 01 电脑配置 1.1推荐配置 •系统&#xff1a;Windows 10 x64系统&#xff08;版本大于等于1809&…

IIC通信原理(软件实现)-GD32

IIC通信原理-GD32 硬件连接 数据变换规则 起始信号和结束信号 应答信号 数据帧格式 #include "my_i2c_soft.h" #include "systick.h"void my_i2c_w_SDA(uint8_t bit_value) {gpio_bit_write(I2C_SOFT_PORT, I2C_SOFT_SDA_PIN, (bit_status)bit_val…

【软件下载】音频ASIO驱动下载

一&#xff0c;简介 在高速USB Audio使用中&#xff0c;需要再windows电脑上安装ASIO驱动&#xff0c;用来进行高速音频流的传输&#xff0c;本文主要介绍如何下载安装ASIO驱动。供参考。 二&#xff0c;安装步骤 2.1 软件下载 下载地址&#xff1a;http://www.asio4all.co…

【Python爬虫与数据分析】UDP/TCP通信协议

目录 一、网络编程基础 二、UDP协议 三、TCP协议 一、网络编程基础 数据编码与解码 str -> bytes&#xff1a;encode编码&#xff0c;发送信息的时候用encode编码bytes -> str&#xff1a;decode解码&#xff0c;打印接收的信息用decode解码 test 你好世界en_code…

C语言switch语句与循环结构

1、循环输入5个元素&#xff0c;输出最大值 #include <stdio.h> #include <string.h> int main(int argc, const char *argv[]) {int num,max;for(int i1;i<5;i){printf("请输入第%d个数&#xff1a;",i);scanf("%d",&num);if(i1)maxn…

CSS 两行文字两端对齐与字符间距的处理

前言 &#x1f44f;CSS 文字对齐与字符间距的处理&#xff0c;在这里&#xff0c;你可以了解到文字渐变&#xff0c;letter-spacing&#xff0c;text-align&#xff0c;text-align-last&#xff0c;filter等&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关…

LabVIEW脉冲检测实现

文章目录 前言一、脉冲检测的原理二、代码实现1、前面板①、输入波形相关参数②、脉冲检测结果 2、程序框图 三、代码自取结论 前言 本节通过 labview 软件实现先导脉冲检测的功能&#xff0c;从而获取先导脉冲的频率、先导脉冲与线性调频信号的延时的相关信息。 一、脉冲检测…

多实例部署和Nginx+Tomcat负载均衡、动静分离

目录 一、Tomcat多实例部署 1.安装好 jdk 2.安装 tomcat 3.配置 tomcat环境变量 4.修改 tomcat2 中的 server.xml文件&#xff0c;要求各 tomcat 实例配置不能有重复的端口号 5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件&#xff0c;添加 tomcat 环境变量 6.启…

Vue和React的区别?

目录 共同点 1. 数据驱动视图 2. 组件化 3. Virtual DOM 不同点 1. 核心思想不同 2. 组件写法差异 3. diff算法不同 4. 响应式原理不同 5. 其他不同点 首先找到 Vue 和 React 的共性&#xff0c;它们被用于解决什么问题&#xff0c; 然后再挖掘各自独特的个性、设计原…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 30 日论文合集)

文章目录 一、检测相关(8篇)1.1 Detect Any Deepfakes: Segment Anything Meets Face Forgery Detection and Localization1.2 Sustainable Palm Tree Farming: Leveraging IoT and Multi-Modal Data for Early Detection and Mapping of Red Palm Weevil1.3 Evaluation of Env…

【DP+博弈】ABC195 E

E - Lucky 7 Battle (atcoder.jp) 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>//#define int long longusing namespace std;const int mxn2e510; const int mxe1e610; const int mod1e97; const int Inf0x3f3f3f3f;string s,x;int N;…

【设计模式】第十九章:访问者模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…