xxl-job项目集成实战,全自动项目集成,可以直接使用到项目中
如果你看官方文档,在研究透,至少也得几天时间,如果你直接看我的文档,快速用到项目中,也就10分钟就搞好了。
xxl-job功能确实很强大,而且使用的人比较多,既然在使用xxl-job,那肯定是基于定时任务比较多,不方便管理,才使用它,让定时任务成为一个独立的服务,其它任务可以快速的使用。
但xxl-job也有自己的问题,问题如下:
1、配置执行器、配置任务,只能在管理界面去操作;也就是说,我如果要使用xxl-job,我代码写好了,还需要手动去xxl-job-admin管理页面手动去配置执行器、配置任务,而且官方文档也没有说通过代码接口的方式创建执行器及任务,这就非常不爽了,我们既然在使用你,那说明我们的定时任务非常多,想快速的集成进来,通过代码自动创建执行器和任务,不要手动去配置。
所以基于上面原因,在实际项目上的使用,本文件就要解决上面的问题,通过代码全自动集成到项目中
在介绍之前,先简单讲一下xxl-job的原理,不是官方一大堆文字,这里说的都是直白话,方便你快速明白如何使用;
1、有两个系统,任务调度中心(xxl-job官方提供)、业务系统(您自己的)
2、使用xxl-job分4步:
(1)在任务调度中心创建执行器(说直白点,就是业务系统在任务调度中心进行一个注册,类似于注册中心)
(2)在任务调度中心创建任务(这个任务,主要是根据cron表达式,定时来调用你的业务系统)
(3)业务系统写代码,先注册,后通过@XxlJob来实现定时任务的具体逻辑,后面会详讲
(4)在任务调度中心启动任务
本文所涉及到的代码会放在文章最后面,欢迎下载;压缩包中有两个工程,分别为xxl-job-admin(官方任务调度中心)、xxl-job-soft(你自已的业务系统),所以本文先介绍启动xxl-job-admin,再介绍xxl-job-soft代码集成,本文xxl-job版本号为:2.4.0
一、xxl-job-admin任务调度中心的环境搭建
1、在xxl-job-admin工程里有一个doc的文件夹,里面有一个tables_xxl_job.sql的数据库脚本文件,直接在mysql数据库上执行,执行完就会创建一个xxl-job的数据库
2、idea打开xxl-job-admin工程,修改application.properties里面的数据库配置,如下:
### web
server.port=8080
server.servlet.context-path=/xxl-job-admin### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.############# mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.137.202:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory### xxl-job, access token
xxl.job.accessToken=default_token### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100### xxl-job, log retention days
xxl.job.logretentiondays=30
3、运行XxlJobAdminApplication.java,服务就启动了,在页面访问:http://localhost:8080/xxl-job-admin
默认用户名为admin,密码为123456

二、xxl-job-soft工程的使用,代码集成xxl-job
说明:xxl-job-soft中的TaskController,里面方法,使用了Map,这是硬编码,实际项目上不要这样用,这只是为了方便看到向xxl-job-admin请求传参,创建执行器和任务等的方便,你主要是要关心创建执行器后返回的executorId(执行器id)和创建任务返回的taskId(任务id),这两个id需要您存储到你的业务数据库,方便后面,比如启动任务、停止任务、删除任务等等使用;
代码集成也和上面说的原理一样,分4步,分别为:
第一步:创建执行器
第二步:创建任务
第三步,业务执行代码和注册
第四步:启动任务
服务启动,运行XxlJobExecutorApplication.java,打开页面
http://localhost:8081/ck/swagger-ui.html

controller代码
@RestController
@RequestMapping("/task")
@Api(tags = "TaskController", description = "任务管理")
public class TaskController {@Value("${xxl.job.executor.appname}")private String appname;@Autowiredprivate XxlJobClient xxlJobClient;@GetMapping("/createExecutor")@ApiOperation("第一步:创建执行器")public String createExecutor(String title) {Map<String,Object> map = new HashMap<>();map.put("title",title);map.put("appname",appname);map.put("addressType",0);String info = xxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.EXECUTOR_CREATE,map);//返回执行器id,删除执行器时,要用此id,根据你的业务保存在业务库String executorId = xxlJobClient.getContent(info);System.out.println("执行器Id:"+executorId);return "执行器Id:"+executorId;}@GetMapping("/createTask")@ApiOperation("第二步:创建任务")public String createTask(@ApiParam(value = "执行器Id")@RequestParam String executorId,@ApiParam(value = "任务名称")@RequestParam String jobDesc,@ApiParam(value = "cron表达式")@RequestParam(defaultValue ="0 * * * * ?" ) String cron,@ApiParam(value = "处理器")@RequestParam(defaultValue ="myHandler" )String executorHandler,@ApiParam(value = "执行参数")@RequestParam String executorParam) {Map<String,Object> map = new HashMap<>();map.put("jobGroup",executorId);//第一步,创建执行器返回的executorIdmap.put("jobDesc",jobDesc);//任务名称map.put("scheduleConf",cron);//0 * * * * ? 每分钟执行一次,自定义map.put("cronGen_display",cron);map.put("executorHandler",executorHandler);//在第三步,通过 @XxlJob("myHandler")注册的处理器,此处传myHandler,根据自己需要换名称map.put("executorParam",executorParam);//此时传的什么值,在第三步,执行时,可以原样获取,获取代码 String param = XxlJobHelper.getJobParam();map.put("author","admin");//默认值map.put("glueType","BEAN");//默认值map.put("scheduleType","CRON");//默认值map.put("executorRouteStrategy","FIRST");//默认值map.put("misfireStrategy","DO_NOTHING");//默认值map.put("executorBlockStrategy","SERIAL_EXECUTION");//默认值map.put("executorTimeout","0");//默认值map.put("executorFailRetryCount","0");//默认值String info = xxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_CREATE,map);//返回任务id,删除执行器时,要用此id,根据你的业务保存在业务库String taskId = xxlJobClient.getContent(info);System.out.println("任务Id:"+taskId);return "任务Id:"+taskId;}@GetMapping("/startTask")@ApiOperation("第四步:启动任务")public String startTask(String taskId) {Map<String,Object> map = new HashMap<>();map.put("id",taskId);//第二步,创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_START,map);return "启动成功";}@GetMapping("/stoptTask")@ApiOperation("停止任务")public String stoptTask(String taskId) {Map<String,Object> map = new HashMap<>();map.put("id",taskId);//第二步,创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_STOP,map);return "停止成功";}@GetMapping("/deleteTask")@ApiOperation("删除任务")public String deleteTask(String taskId) {Map<String,Object> map = new HashMap<>();map.put("id",taskId);//第二步,创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_DELETE,map);return "停止成功";}@GetMapping("/deleteExecutor")@ApiOperation("删除执行器")public String deleteExecutor(String executorId) {Map<String,Object> map = new HashMap<>();map.put("id",executorId);//第二步,创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.EXECUTOR_DELETE,map);return "停止成功";}
}
执行器注册代码
@Beanpublic 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;}
定时任务具体的业务代码
//第三步,业务执行代码@XxlJob("myHandler")public void demoJobHandler() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");String param = XxlJobHelper.getJobParam();String msg ="收到第二步创建任务时executorParam的参数:"+param+" 当前任务执行结束";XxlJobHelper.log(msg);System.out.println(msg);}
三,测试使用,在swagger中操作
第一步:创建执行器,记住执行器Id返回为2,具体返回多少,根据你自己的执行结果:

在任务调度中心,也可以看到执行器了

第二步:创建任务,任务id为3,并在任务调度中心,查看任务状态是停止状态


第三步,业务执行代码和注册
上面代码已列出
第四步:启动任务


第五步:在业务系统,查看任务是否执行,查看已运行

四、代码下载地址:
链接:https://pan.baidu.com/s/1qZHQmzBF0UrSDHdYobmYlQ?pwd=ka1u
提取码:ka1u
相关文章:
xxl-job项目集成实战,全自动项目集成,可以直接使用到项目中
如果你看官方文档,在研究透,至少也得几天时间,如果你直接看我的文档,快速用到项目中,也就10分钟就搞好了。 xxl-job功能确实很强大,而且使用的人比较多,既然在使用xxl-job,那肯定是…...
Qt生成PDF报告
文章目录 一、示意图二、实现部分代码总结 一、示意图 二、实现部分代码 //! 生成测试报告 void MainWindow::createPdf(QString filename, _pdf_msg_& msg, const QMap<QString, int>& ok, const QMap<QString, int>& err) {//QDir dir;if(!dir.exis…...
Jenkins 安装全攻略:从入门到精通
目录 一:安装文件夹准备 1.打开,/home/admin目录 2.新建三个文件夹 二:安装tomcat 1.打开tomcat目录进行tomcat安装 2.解压tomcat文件 3.开放端口号 4.启动tomcat 5.浏览器访问tomcat 三:安装Maven 1.打开maven目录进行…...
迎重阳,话养老:平安养老险如何助力国民“养老梦”?
10月23日,我们将迎来传统节日重阳节,又称敬老节,自古就有祭祖、登高、赏菊三大风俗,流传至今,已成为人们孝老敬老的重要节日。 随着老龄化日益加深,在“敬老”的同时如何“备老”成为人民群众长期热议的话题…...
微信小程序获取用户信息
个人博客 微信小程序获取用户信息 个人微信公众号,求关注,求收藏,求指错。 文章概叙 本文主要讲的是小程序获取用户信息的,更新测试时间是2023-10-25 更改原因 首先,官网上的解释是这样的,为了安全合…...
Mysql 索引原理和优化方式
一、索引原理 什么是索引 索引是存储引擎用于快速找到记录的一种数据结构。可以联想到字典中的目录。 索引的分类 (1) Hash 索引 Hash 索引是比较常见的一种索引,他的单条记录查询的效率很高,时间复杂度为1。但是,…...
Ubuntu安装VM TOOLS解决虚拟机无法和WINDOWS粘贴复制问题
1:首先使用VMware Workstation安装一个Ubuntu的系统。 2:现在已经不建议安装VM TOOLS。建议安装OPEN-VM-TOOLS。 3:进入系统使用下面的命令安装。 sudo apt install open-vm-tools 4:提示下面错误,Package open-vm…...
【Docker】Docker Swarm介绍与环境搭建
为什么不建议在生产环境中使用Docker Compose 多机器如何管理?如何跨机器做scale横向扩展?容器失败退出时如何新建容器确保服务正常运行?如何确保零宕机时间?如何管理密码,Key等敏感数据? Docker Swarm介…...
国产CAN总线收发芯片DP1042 兼容替换TJA1042
说明 1 简述 DP1042是一款应用于 CAN 协议控制器和物理总线之间的接口芯片,可应用于卡车、公交、小汽车、工业控制等领域,支持 5Mbps CAN FD 灵活数据速率,具有在总线与 CAN 协议控制器之间进行差分信号传输的能力,完全兼容“ISO…...
[架构之路-243]:目标系统 - 纵向分层 - 架构是表面轮廓、内部骨架、未来蓝图,企业组织架构、信息系统架构、软件架构、应用程序就架构
目录 一、什么是架构 1.1 架构是表面轮廓 1.2 架构是内部骨架 1.3 架构是蓝图,是愿景 1.4 架构是数据流、控制流、管理流、同步流 1.5 数据、控制、同步、管理的比较 二、架构的层级 2.1 企业组织架构 2.2 企业系统架构 2.2 信息系统架构 2.3 软件架构 …...
【接口技术】定时计数器习题
1:8253芯片有______个端口地址。 【可选】 2 3 4 6 解答:4 2:8253芯片有______种工作方式。 【可选】 3 4 5 6 解答:6 3: 8253芯片内部有完全独立的______。 【可选】 6个16位计数通道 3个16位计数通道 6个8位计…...
DC电源模块的的散热结构合理布局
BOSHIDA DC电源模块的的散热结构合理布局 DC电源模块在工业控制、通讯、汽车电子等领域广泛应用。然而,随着功率密度不断提高,DC电源模块产生的热量也越来越大,散热问题变得越来越突出。为了保障电路的稳定性和可靠性,必须采取合…...
Fedora Linux 38下安装音频与视频的解码器和播放器
Fedora Linux 38 操作系统安装好后,默认是没有音频与视频的解码器的,音频与视频的播放体验非常差劲。但是第三方的软件源中有解码器和播放器的软件,需要我们自己手动安装。、 连接互联网,打开Shell命令行: 1. sudo d…...
边缘计算:云计算的延伸
云计算已经存在多年,并已被证明对大大小小的企业都有好处;然而,直到最近边缘计算才变得如此重要。它是指发生在网络边缘的一种数据处理,更接近数据的来源地。 这将有助于提高效率并减少延迟以及设备和云之间的数据传输成本。边缘…...
【经验分享】在Kylin桌面版操作系统中配置openGauss的ODBC数据源
引言 openGauss是一款开源的关系型数据库管理系统,它提供了强大的功能和性能,可以满足各种企业级应用的需求。与此同时,ODBC(Open Database Connectivity)是一个标准的数据库访问接口,它允许应用程序通过统…...
WSL——ubuntu中anaconda换源(conda、pip)
1、conda 打开Ubuntu,输入下列命令。 conda config --set show_channel_urls yes 在文件管理器地址栏,输入:\\wsl$。打开Ubuntu根路径,其中显示了.condarc文件。 以文本形式打开,并输入要换的源,保存即可。…...
IP地址在网络安全中的关键作用
IP地址(Internet Protocol Address)是互联网世界中的重要标识符,它在网络安全领域发挥着至关重要的作用。这些地址不仅帮助设备在网络上找到彼此,还在多个方面有助于维护网络的完整性、机密性和可用性。本文将探讨IP地址在网络安全…...
Android.mk 中覆盖应用包名
项目场景: 一般来讲应用包名都是配置在 AndroidManifest.xml 中的,但遇到特殊情况,需要修改源码中应用包名 通常都会先去改 AndroidManifest.xml package 但改为后编译发现一顿错误,原因是 java 类中已经指定了 R 文件包名&…...
如何最有效地使用ChatGPT:提问技巧与策略
前言 在如今信息技术高速发展的时代,像ChatGPT这样的大型自然语言处理模型为我们提供了一个强大的工具,以获取各种信息和答案。然而,要充分利用这一工具,您需要掌握一些提问技巧与策略,以确保获得最准确和有用的回答。…...
【JAVA学习笔记】40 - 抽象类、模版设计模式(抽象类的使用)
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/abstract_ 一、抽象类的引入 很多时候在创建类的时候有一个父类,比如animal类,他的子类会有各种方法,为了复用需要进行方法的重写&…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
