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 数据文件设置(放全局最上…

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;也是…

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;对各种操作实施…

Day_3

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

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

智慧监控 高效运维

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

Spring MVC(一)

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

Redis进阶学习

Redis进阶学习 一、Redis事务1.2 Redis监控1.3 Jedis连接1.4 SpringBoot整合1.5 自定义RedisTemple1.6 Redis.conf详解 二、 Redis持久化2.1 RDB2.2 AOF进程 三、Redis发布订阅3.1 Redis主从复制3.2 集群环境配置3.3、复制原理3.4、宕机后主动变为主机3.5、哨兵模式 四、Redis缓…

2024年大数据与艺术设计国际学术会议(ICBDAD 2024)

2024年大数据与艺术设计国际学术会议(ICBDAD 2024) 2024 International Conference on Big Data and Art Design 一、【会议简介】 2024年大数据与艺术设计国际学术会议&#xff0c;听起来好像两个完全不相关的领域&#xff0c;却意外地融合在了一起。 在这个会议上&#xff0c…

el-carousel走马灯页数回到第一页

我的走马灯是在一个弹窗里,包裹着一些button,切换到下一页时 关闭弹窗再打开弹窗还显示的是上次第二页位置 领导很不满意 1. 2.写在你打开弹窗或者关闭弹窗的位置 this.$refs.carousel && (this.$refs.carousel.activeIndex 0); 解释一下: this.$refs.carousel: thi…

开源数据可视化大屏对接表单数据实践!

如果你需要一个表单系统&#xff0c;进行数据收集&#xff1b;可以使用tduck填鸭进行私有化部署&#xff0c;进行表单制作&#xff0c;完成数据收集。 在实际业务中&#xff0c;往往需要将收集的数据进行展示或分析&#xff1b;此时就可以使用表单数据推送到TReport中&#xf…

华为eNSP中型企业局域网网络规划设计(下)

→b站传送门&#xff0c;感谢大佬← →华为eNSP中型企业局域网网络规划设计&#xff08;上&#xff09;← →拓扑图传送门&#xff0c;可以自己配置着玩← 配置ospf AR3 [AR3]ospf 1 router-id 3.3.3.3 //出口默认路由 [AR3-ospf-1]default-route-advertise always #area…

R语言数据探索与分析-中国GDP回归分析与预测

首先读取数据&#xff1a; 将GDP列转换为常规数字格式 # 可视化GDP数据 # 查看数据结构 # 确保数据类型是正确的 第一张图片展示了中国2002年到2021年间的GDP增长趋势&#xff0c;这是一个时间序列图&#xff0c;其中横轴表示年份&#xff0c;纵轴表示GDP&#xff08;单位未…

OpenAI 高管:一年后,你会觉得现在的 ChatGPT 像笑话一样糟糕|TodayAI

OpenAI 的首席运营官 Brad Lightcap 表示&#xff0c;一年后&#xff0c;你会觉得现在的 ChatGPT 像笑话一样糟糕。未来的 ChatGPT 版本将会有重大升级。他还讨论了 AI 取代人类工作和对电网的压力的可能性。 虽然我们不知道 OpenAI 何时会推出 GPT-5&#xff0c;但公司高管已…

三年软件测试经验遭遇求职困境?揭秘求职市场的隐藏陷阱

1.个人背景 小李&#xff0c;我的一位朋友&#xff0c;拥有三年多的软件测试工作经验。他本科毕业后便投身于测试行业&#xff0c;熟练掌握Python编程&#xff0c;能够编写自动化测试脚本&#xff0c;并且熟悉Selenium和性能测试。然而&#xff0c;尽管他具备这些技能和经验&am…

Zabbix+Grafana-常见报错及异常处理方式记录

文章目录 Zabbix安装篇Zabbix Web页面连接数据库失败 Zabbix使用篇中文显示不全 Zabbix报警篇新建的用户&#xff0c;配置报警后&#xff0c;无法收到报警 Grafana安装篇Windows系统安装时&#xff0c;添加zabbix报错&#xff1a;An error occurred within the plugin Zabbix安…