SpringBoot整合XXL_JOB示例

news2024/9/23 11:22:56

XXL-JOB 是一个分布式任务调度平台,主要用于管理和执行定时任务。它适用于各种场景,例如定时任务、批处理任务、分布式任务等。XXL-JOB 提供了丰富的功能,使得任务调度变得简单、高效和可靠。以下是 XXL-JOB 的一些主要功能和特点:

分布式调度:
支持分布式任务调度,可以在多个节点上运行。
通过调度中心统一管理任务,保证任务只在一个节点上执行,避免重复执行。

简单易用:
提供了易用的 Web 管理界面,可以通过界面方便地管理和监控任务。
任务的定义和配置简单,可以通过注解或配置文件快速设置任务。

任务管理:
支持多种任务类型,包括 BEAN 模式(Spring Bean)、GLUE 模式(动态脚本)、Shell 脚本、Python 脚本等。
提供了任务的添加、删除、修改、启动、停止等基本操作。

任务执行策略:
支持多种任务执行策略,例如串行执行、并行执行、故障转移等。
可以设置任务的超时时间、重试次数等。

任务监控与报警:
提供详细的任务执行日志,方便追踪和调试任务。
支持任务执行失败的报警功能,可以通过邮件、短信等方式通知相关人员。

调度策略:
支持多种调度策略,包括 CRON 表达式、固定间隔、按天执行等。
可以设置任务的执行优先级,保证关键任务优先执行。

高可用性:
支持任务的高可用性设计,通过调度中心和执行器的心跳机制,保证任务的可靠执行。
具备集群容错能力,当一个节点宕机时,其他节点可以接管任务。

首先我们先去 GitHub 上把 xxl_job 项目拉下来 Github项目地址
idea 直接用这个地址克隆就可以了 https://github.com/xuxueli/xxl-job.git

在这里插入图片描述

在doc里面有一个SQL文件,我们把这个导入到自己的数据库里面

在这里插入图片描述

里面有这几张表

在这里插入图片描述

然后我改一下项目的配置文件,主要就是换一下数据库的配置

在这里插入图片描述

当然还有下面这两个配置,一个是用来处理报警的时候邮件推送通知的,还有一个认证用的accessToken,邮件那个我们可以不管,有需要的话自己研究一下,这个token我建议大家自己配置一下,随机字符串就行,后面我们自己项目连接xxl_job服务会需要用到这个accessToken

在这里插入图片描述

改好后我们就可以直接启动

在这里插入图片描述

我们在浏览器直接访问 http://localhost:8080/xxl-job-admin/toLogin
注意要是改了端口配置记得换成自己的,默认的是8080
默认的用户名admin 密码123456

在这里插入图片描述

进去后就是下面这样的

在这里插入图片描述

接下来我们新建一个 springboot 项目

在这里插入图片描述

注意箭头位置
因为我这边用的还是Java8,新版idea可能没有这个选项,所以我们把Server URL换成阿里的 https://start.aliyun.com

在这里插入图片描述

点击 Next
下一步里面主要是最上面的 springboot 版本,因为选的 Java8,所以这里版本不能用3.0及以上
然后就是一些基础依赖,大家看着选,最基本的web、mysql还有redis这些可以勾上,当然这里主要为了测试 xxl_job 不勾也没关系

在这里插入图片描述

然后点下面的Create项目就创建好了

在这里插入图片描述
直接改一下配置文件后缀为yml

在这里插入图片描述
替换掉里面的内容
注意因为xxl_job的默认端口也是8080,所以这里我换成了8081

server:
  port: 8081

spring:
  application:
    name: xxl-demo

然后我们启动这个项目,项目能正常启动就可以了

在这里插入图片描述

现在我们在这个项目里面加入 xxl_job
首先我们需要添加依赖,记得刷新一下 Maven 防止包没有下载下来

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

在这里插入图片描述
然后在 application.yml 里面加上 xxl_job 的配置
注意下面的 accessToken 要跟之前 xxl_job 的一致

xxl:
  job:
    executor:
      appname: ${spring.application.name}
      logpath: ${spring.application.name}/xxl-job
      logretentiondays: 30
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin
    accessToken: default_token_123456

在这里插入图片描述

还需要一个加载配置文件的类

package com.sakura.xxl.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Sakura
 * @date 2024/7/12 11:07
 */
@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("${server.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.setPort(port + 10000);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}

大家自己建一下目录

在这里插入图片描述
到这里配置就完成了,下面我们就可以开始写代码使用了

我们加一个定时任务类

package com.sakura.xxl.handler;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * @author Sakura
 * @date 2024/7/12 11:14
 */
@Component
public class XxlJobHandler {

    private Logger logger = LoggerFactory.getLogger(XxlJobHandler.class);

    /**
     * 更新状态
     **/
    @XxlJob("demo")
    public void demo() {
        String jobParam = XxlJobHelper.getJobParam();
        logger.info("任务执行" + jobParam);
    }

}

在这里插入图片描述

重新启动项目,可以看到已经加载成功了
在这里插入图片描述

回到之前的控制台

在这里插入图片描述
我们新增一个执行器
注意AppName要跟项目配置文件的spring.application.name一致

在这里插入图片描述

刷新一下列表,如果看不到下面这个就重启一下我们的项目再刷新

在这里插入图片描述
接着我们去任务管理里面加上我们刚才在项目的 demo 方法

在这里插入图片描述
主要注意下面箭头三个位置
执行器就是我们刚才配的执行器,Cron 是我们要执行的时间,重点是JobHandler,这个要跟我们项目里面的一致

在这里插入图片描述

在这里插入图片描述

我们先执行一次测试一下

在这里插入图片描述

在这里插入图片描述

查看控制台可以看到已经执行成功了

在这里插入图片描述

也可以在xxl_job的控制台查看日志

在这里插入图片描述

在这里插入图片描述

注意上面只是执行了一次,并没有真正的开启服务,就是说不会按你配置的时间运行,真的开启需要你点启动

在这里插入图片描述

比如我把时间调成每小时每分钟都会执行

在这里插入图片描述

下面这个就是自动执行打印的日志

在这里插入图片描述

到这里xxl_job的基本使用就完成了,其它的一些使用方法大家自己研究一下

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

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

相关文章

Centos系统内磁盘分区

Centos系统内磁盘分区 建议如果有重要数据提前做好备份 以根目录扩容50G为例&#xff1a; 1、卸载/home目录 umount /home 2、删除逻辑卷 y确认即可 lvremove /dev/mapper/centos-home 3、df -h查询一下&#xff0c;/home目录已经不见了 4、向根目录分区追加50G容量 lv…

数据销毁境外间谍情报机关逼迫、威胁贷款学生为其窃取我国家秘密

近年来&#xff0c;随着国际形势的复杂多变&#xff0c;境外间谍情报机关的活动也日益猖獗。他们利用各种手段&#xff0c;包括通过校园贷逼迫、威胁贷款学生为其窃取我国国家秘密&#xff0c;这种行为不仅危害了国家安全&#xff0c;也严重损害了社会的公平正义。那么&#xf…

微信小程序毕业设计-汽车维修项目管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

(一)高并发压力测试调优篇——MYSQL数据库的调优

前言 在实际项目开发中&#xff0c;很多业务场景下都需要考虑接口的性能要求&#xff0c;追求高并发、高吞吐量。那么对于此类问题如何入手呢&#xff1f;关注作者&#xff0c;不迷路。本节内容主要介绍在数据库db方面的优化&#xff0c;以mysql数据库为例。 关于db的优化&am…

python库(11):Box库简化字典和对象之间的转换

1Box库简介 Box是一个Python库&#xff0c;它提供了一种将数据封装在字典和列表中的方式&#xff0c;同时提供了一些额外的功能&#xff0c;比如数据验证、默认值设置等。这使得Box库非常适合用于配置管理、数据传输对象&#xff08;DTO&#xff09;的创建&#xff0c;以及任何…

PDF 中图表的解析探究

PDF 中图表的解析探究 0. 引言1. 开源方案探究 0. 引言 一直以来&#xff0c;对文档中的图片和表格处理都非常有挑战性。这篇文章记录一下最近工作上在这块的探究。图表分为图片和表格&#xff0c;这篇文章主要记录了对表格的探究。还有&#xff0c;我个人主要做日本项目&…

[C++]——同步异步日志系统(4)

同步异步日志系统 一、日志等级模块设计二、日志消息类设计 一、日志等级模块设计 定义出日志系统所包含的所有日志等级分别为&#xff1a;&#xff08;7个等级&#xff09; UNKNOW0&#xff0c;未知等级的日志DRBUG &#xff0c;调试等级的日志INFO &#xff0c;提示等级的日…

前端调试技巧(npm Link,vscode调试,浏览器调试等)

Npm Link 功能&#xff1a; 在本地开发npm模块的时候&#xff0c;我们可以使用npm link命令&#xff0c;将npm 模块链接到对应的运行项目中去&#xff0c;方便地对模块进行调试和测试 断点调试 vscode调试 Debug Vue2 Project 目标&#xff1a;在VSCode中调试项目代码…

docker拉取镜像-配置阿里云镜像加速

1、配置阿里云镜像&#xff08;用于拉取镜像加速&#xff09; sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo syst…

论文阅读【时间序列】TimeMixer (ICLR2024)

【时间序列】TimeMixer (ICLR2024) 原文链接&#xff1a;TIMEMIXER: DECOMPOSABLE MULTISCALE MIXING FOR TIME SERIES FORECASTING 代码仓库&#xff1a;https://github.com/kwuking/TimeMixer 符号定义 符号含义P用于预测的历史序列长度&#xff08;seq_len&#xff09;F预测…

debian 12 Install

debian 前言 Debian是一个基于Linux内核的自由和开放源代码操作系统&#xff0c;由全球志愿者组成的Debian项目维护和开发。该项目始于1993年&#xff0c;由Ian Murdock发起&#xff0c;旨在创建一个完整的、基于Linux的自由软件操作系统。 debian download debian 百度网盘…

LangChain之工具Tools(下)

LangChain之工具Tools SQLDatabase工具准备数据初始化数据库光标查询​字符串查询带参数查询​使用SQLAlchemy查询​使用自然语言查询数据库 使用其他工具Tavily Search工具Dall-E图像生成工具ArXiv工具 SQLDatabase工具 在 LangChain 中,SQLDatabase工具可以用来与SQL数据库进…

和Bug较劲的第n天:[Error: Unable to open snapshot file: No such file or directory]

问题描述 最近做了一个小demo&#xff0c;基于parcel的&#xff0c;在迁移仓库的时候发生了一个报错 [Error: Unable to open snapshot file: No such file or directory] 原因分析&#xff1a; 在迁移仓库的时候&#xff0c;我将项目放入了一个以中文命名的文件夹里&#xf…

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——安装篇(一)

#在生产环境中部署Elasticsearch&#xff1a;最佳实践和故障排除技巧——安装篇&#xff08;一&#xff09; 前言 关键字&#xff1a; 机器学习 人工智能 AI chatGPT 学习 实现 使用 搭建 深度 python 事件 远程 docker mysql安全 技术 部署 技术 自动化 代码 文章目录 - -…

【斯坦福因果推断课程全集】2_无混淆和倾向分1

目录 Beyond a single randomized controlled trial Aggregating difference-in-means estimators Continuous X and the propensity score 随机试验的一个最简单的扩展是无约束下的干预效果估计。从定性上讲&#xff0c;当我们想估计一种并非随机的治疗效果&#xff0c;但一…

python-小理与他的画(赛氪OJ)

[题目描述] 小理是个画家&#xff0c;他希望有一天他的画能让心仪的她看到。 只是后来她有了他&#xff0c;他却只有他的画&#xff0c;他望着他的画&#xff0c;默默的发呆。 可惜做题的你&#xff0c;画不出他画的她&#xff0c;所以&#xff0c;我们只好画点简单的画&#x…

MFC扩展库BCGControlBar Pro v35.0 - 可视化管理主题等全新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了&#xff0c;这个版本改进类Visual Studio 2022的视觉主题、增强对多个…

土壤分析仪:解密土壤之奥秘的科技先锋

在农业生产和生态保护的道路上&#xff0c;土壤的质量与状况一直是我们关注的焦点。土壤分析仪&#xff0c;作为现代科技在农业和环保领域的杰出代表&#xff0c;以其高效、精准的分析能力&#xff0c;为我们揭示了土壤的奥秘&#xff0c;为农业生产提供了科学指导&#xff0c;…

只为拿证,软考中级哪个科目比较简单?

在探讨软考中级哪个最容易过时&#xff0c;我们首先需要了解软考的类别和具体的中级证书种类。软考全称为计算机技术与软件专业技术资格水平考试&#xff0c;是全国统一的考试&#xff0c;其证书由人力资源和社会保障部和国家工业和信息化部门联合颁发&#xff0c;具有很高的证…

cuda缓存示意图

一、定义 cuda 缓存示意图gpu 架构示意图gpu 内存访问示意图 二、实现 cuda 缓存示意图 DRAM: 通常指的是GPU的显存&#xff0c;位于GPU芯片外部&#xff0c;通过某种接口&#xff08;如PCIE&#xff09;与GPU芯片相连。它是GPU访问的主要数据存储区域&#xff0c;用于存储…