springboot项目中引入Xxl-Job并部署和使用

目录

模块划分

 配置调度中心

配置执行器

 添加执行器

写一个简单的定时任务

XxlJobHelper


xxl-job是分布式任务调度平台,部署为独立的调度服务平台

github地址:xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB) (github.com)

 文档地址:分布式任务调度平台XXL-JOB (xuxueli.com)

git clone https://github.com/xuxueli/xxl-job.git

模块划分

在自己项目添加新模块,有利于项目的管理,父工程pom文件中添加:

<!-- 对xxl-job单独做配置的模块  -->
​​<module>jungle-job</module><!-- 存放调度中心的模块  -->
<module>jungle-extends</module>

在job模块和extends模块中将父工程指向自己的父工程:

将下载的xxl-job源码中的xxl-job-admin模块拷贝到extends模块下,修改pom文件内容,父工程指向extends

maven导入调度中心模块:

最后模块依赖情况:

 配置调度中心

初始化xxl-job数据库,在mysql数据库中执行sql脚本,调度平台的数据库初始化SQL脚本存放地址:

/xxl-job/doc/db/tables_xxl_job.sql

右键数据库连接,执行sql脚本,会创建xxl-job库并导入初始数据,

修改调度中心的数据库配置:

设置执行器注册token:

 

若想把.properties文件内容转成.yml文件内容,可以让GPT去生成。

启动调度中心:

添加services,找到springboot:

配置执行器

自己项目做为一个执行器,在job模块添加以下依赖:

<!-- 你也可以引入你项目的其他模块,来间接引入以下依赖      -->          <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.5.5</version></dependency>

 依然xxl-job核心依赖:

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

自己项目配置文件中添加自定义配置内容:

#========== xxl-job 自定义配置
xxl.job:# 执行器开关enabled: true# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。admin-addresses: http://${custom.dev.ip}:9112/job-admin# 执行器通讯TOKEN:非空时启用,需与调度中心配置的一致access-token: xxl-jobexecutor:# 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册appname: xxl-job-executor-${jungle.name}# 执行器端口号 执行器从9101开始往后写port: 9101# [选填]执行器注册:默认IP:PORTaddress: # 选填]执行器IP:默认自动获取IPip: # 执行器运行日志文件存储磁盘路径logpath: ./logs/xxl-job# 执行器日志文件保存天数:大于3生效logretentiondays: 30

如果要指定执行器,可以设置address:http://172.20.5.122:9101

 172.20.5.122为你要指定的执行器ip地址,端口9101往后写

job模块中添加属性配置类XxlJobProperties ,配置类 XxlJobConfig,添加执行器组件配置 XxlJobSpringExecutor

//xxljob配置类
@Data
@ConfigurationProperties(prefix = "xxl.job")
public class XxlJobProperties {private Boolean enabled;private String adminAddresses;private String accessToken;private Executor executor;@Data@NoArgsConstructorpublic static class Executor {private String appname;private String address;private String ip;private int port;private String logPath;private int logRetentionDays;}
}
//执行器组件配置
@Slf4j
@Configuration
@EnableConfigurationProperties(XxlJobProperties.class)
@AllArgsConstructor
//当名为 xxl.job.enabled 的属性值为 true 时,才会加载这个配置类
@ConditionalOnProperty(prefix = "xxl.job", name = "enabled", havingValue = "true") 
public class XxlJobConfig {private final XxlJobProperties xxlJobProperties;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {log.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());XxlJobProperties.Executor executor = xxlJobProperties.getExecutor();xxlJobSpringExecutor.setAppname(executor.getAppname());xxlJobSpringExecutor.setAddress(executor.getAddress());xxlJobSpringExecutor.setIp(executor.getIp());xxlJobSpringExecutor.setPort(executor.getPort());xxlJobSpringExecutor.setLogPath(executor.getLogPath());xxlJobSpringExecutor.setLogRetentionDays(executor.getLogRetentionDays());return xxlJobSpringExecutor;}}

启动自己项目,看到以下日志,表示执行器注册成功

 添加执行器

添加一个执行器,AppName与项目中自己配置的appname相同,执行器名字自己取,注册方式选择自动注册,点击保存

 因为上面配置中ip并没有配置值,所以会自动获取ip,执行器启动后需要一会调度中心便会检测到,点击查看

自带的执行器可以删除了

写一个简单的定时任务

更多示例在.\xxl-job-master\xxl-job-executor-samples\xxl-job-executor-sample-springboot\src\main\java\com\xxl\job\executor\service\jobhandler目录下的SampleXxlJob

添加类:

@Component //交给spring容器管理,让spring能够找到
public class DemoXxlJob {@XxlJob("demo_job_handler")public void demoJobHandler() {//在调度平台查看该日志XxlJobHelper.log("XXL-JOB, demo_job_handler 执行.");System.out.println("------> demoJobHandler execute success.");}}

新增一个任务,带红色 * 的为必填项,这里我设置一个30s执行一次的任务

 启动任务,也可手动触发一次任务执行(点击执行一次):

 点击查询日志可看到:

XxlJobHelper

 获取配置的任务参数:

String jobParam = XxlJobHelper.getJobParam();

自定义任务成功或失败:

        String jobParam = XxlJobHelper.getJobParam();if (jobParam!= null && jobParam.equals("1")){XxlJobHelper.handleSuccess("模拟业务成功");}else {XxlJobHelper.handleFail("模拟业务失败");}

 成功:

 失败:

部署至服务器上

        使用Maven对整个项目打包,这样调度中心也会打包成jar包,在target目录下可以查看,可上传至服务器就行部署,也可以打包后使用调度中心模块下的dockerfile进行本地构建。

        本地没有docker环境可以将dockerfile文件和jar包上传至服务器上构建,并修改一下jar包所在目录:

构建镜像:

#xuxueli/xxl-job-admin:v1镜像名和tag标签   ./xxl-job-admin是dockerfile所在目录
docker build -t xuxueli/xxl-job-admin:v1 ./xxl-job-admin

运行xxl-job容器:

sudo docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin:v1

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

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

相关文章

视频怎么去水印?这三款工具助你轻松搞定

在视频处理的过程中&#xff0c;水印常常成为我们的一大难题。它不仅影响了视频的美观度&#xff0c;还可能涉及版权问题。那么&#xff0c;如何高效去除视频中的水印呢&#xff1f;接下来&#xff0c;我将为大家推荐三款国内外备受好评的视频去水印工具&#xff1a;水印云、In…

Jmeter性能测试(五)

一、Jmeter参数化常用方式 1、CSV 数据文件设置 2、查询数据库(JDBC Connection Configuration) 二、CSV 数据文件设置 1、准备一个txt文件(不需要写表头&#xff0c;直接写你要用的数据就行了&#xff0c;多个字段用英文逗号隔开) 2、添加一个CSV 数据文件设置(放全局最上…

让《行列视》解放数据力量,提升业务洞察

在当今信息化浪潮下&#xff0c;数据已经成为企业发展的核心驱动力之一。如何更好地管理和利用数据&#xff0c;已成为企业发展过程中亟需解决的问题之一。而报表工具作为数据可视化和分析的利器&#xff0c;正逐渐受到企业的重视和青睐。 一、《行列视》作为报表工具的重要性…

RabbitMQ基础入门

初识MQ 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不能跟多个人同…

栈的2道面试题【有效的括号】【用栈实现队列】

栈的面试题&#xff1a; 1.有效的括号 题目&#xff1a; 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合…

560. 和为 K 的子数组 974. 和可被 K 整除的子数组 【前缀和】

题目链接 ​​​​​​​974. 和可被 K 整除的子数组 560. 和为 K 的子数组 今天刷题的时候&#xff0c;刷了这两题&#xff0c;感觉挺有意思的。代码写起来挺简单的&#xff0c;但是思路和其中的细节以及涉及到的知识点确实让我挺意外的。这里写个博客解析一波&#xff0c;也是…

一个月速刷leetcodeHOT100 day02

今天的三道题 移动零 在双指针分组里的简单题 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 输入: nums [0,1,0,3,12] 输出: [1,3,12,0…

Python自动化下载指定公开页面文件

示例代码如下&#xff0c;但你拿到本地之需要做两件事才能运行 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time# 设置Se…

计算机组成原理(超详解!!) 第七节 中央处理器(上)

1.CPU的功能和组成 CPU的功能&#xff1a; 指令控制&#xff1a;程序的顺序控制。 操作控制&#xff1a;管理并产生每条指令的操作信号&#xff0c;并把它们送到相应部件&#xff0c;控制这些部件按要求进行动作。 时间控制&#xff1a;对各种操作实施…

MySQL表分区深入指南

MySQL的表分区功能允许将一个表的数据分散存储在多个物理子表中&#xff0c;但在逻辑上仍表现为一个单独的表。这可以帮助提高大型数据库表的查询和维护效率。本文将详细介绍如何在MySQL中实施和管理表分区&#xff0c;包括分区类型、创建分区表的步骤&#xff0c;以及分区表的…

Day_3

1. HttpClient HttpClient是Apache的一个子项目&#xff0c;是高效的、功能丰富的支持HTTP协议的客户端编程工具包 作用&#xff1a;发送HTTP请求&#xff0c; 接受相应数据 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>…

ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动&#xff0c;所以需要创建es用户 useradd elasticsearch passwd elasticsearch解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sudo c…

controlnet的preprocessor类型

GitHub - huggingface/controlnet_auxContribute to huggingface/controlnet_aux development by creating an account on GitHub.https://github.com/huggingface/controlnet_aux/https://huggingface.co/lllyasviel/sd_control_collection

js中日期Date的使用

日常搬砖过程中,凡事使用到Date总是一知半解,每次都要查阅资料,今天有时间把这里整理一下,希望今天储备的知识,够以后使用就不用查阅资料了哈,现在开始吧 new Date() 使用它可以创建一个日期实例,并返回代表当前时间的字符串 接收参数有5种形式 无参数,新创建的 Date 对象代…

Qt绘制箭头

Qt绘制箭头 接收两个点作为向量的两端&#xff0c;用来确定箭头方向&#xff0c;额外添加参数&#xff0c;确定箭头是否和向量一致 然后使用fillPath填充箭头 QPainterPath arrowPath(const QPointF& p1, const QPointF& p2, int direct 0, int endIndex 0, int ar…

智慧监控 高效运维

随着企业IT建设的不断深入和完善&#xff0c;IT管理的重要性逐渐被重视&#xff0c;打通数据割裂&#xff0c;使业务更加充分融合。亟需一套统一的平台来实现跨品牌跨设备类型的集中监控和管理。 LinkSLA带外监控平台&#xff0c;不仅适用于大规模或超大规模的运维场景&#x…

量化交易的优势和QMT、Ptrade开通流程

量化交易没有一个精确的定义&#xff0c;广义上可以认为&#xff0c;凡是借助于数学模型和计算机实现的交易方法都可以称为量化交易。 量化交易的基本原理是通过计算机方法对海量的股票市场历史数据进行分析&#xff0c;总结出一些能够带来持续收益的交易因子。根据这些因子编…

Tomcat添加服务以及设置开机自启

下载地址连接 Index of /dist/tomcat👓 注意点:不要出现中文路径 #环境变量CATALINA_HOME=D:\apache-tomcat-7.0.62 TOMCAT_HOME=D:\apache-tomcat-7.0.62 JAVA_HOME=D:\tool\jdk1.8.0_111 PATH=%CATALINA_HOME%\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\lib;D:\tool\jdk1.…

将数据结构和流程可视化——E-R图和DFD图

通过程序处理数据时&#xff0c;不仅可以将数据保存到文件&#xff0c;还可以将其保存到数据库中。在数据库中数据是以表格形式保存的&#xff0c;但并不是只有一个表格&#xff0c;而是多个表格进行保存&#xff0c;因此数据更易于管理&#xff0c;即使变更数据&#xff0c;也…

Spring MVC(一)

1 Spring MVC概述 我们在之前学习Servlet的时候&#xff0c;认识了在WEB开发中MVC设计模式&#xff0c;其最为经典的设计就是&#xff0c;通过控制器&#xff08;Controller&#xff09;分离模型&#xff08;Model&#xff09;和视图&#xff08;View&#xff09;。在具体的WEB…