官网:https://www.xuxueli.com/xxl-job/
https://blog.csdn.net/f2315895270/article/details/104714692/
XXL-JOB的使用(详细教程)
源码下载地址:https://gitee.com/xuxueli0323/xxl-job/tree/2.3.0
吐槽一句:现在的去源码那边拉取代码在按照官网上的教程走会有问题的,比如找不到@JobHandler注解等等,按照我下面的做法做
先提几个问题:
第一:多集群服务器,如何让定时任务只执行一次
使用调度中心,来管理触发器(corn也就是表达式),触发器的数据,执行器的数据,任务数据等放在db数据库中
第二:@JobHandler注解被@XxlJob替换掉了
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用
1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
4、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA;
5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;
6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
7、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;
8、故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
9、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
10、任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务;
11、任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;
12、任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;
13、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务;
14、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
15、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发
用上面的源码链接,拉取代码下来后,
然后运行自带的tables_xxl_job.sql文件,在Navcation中去运行,生成需要的表
xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用,推荐这种方式;
xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;
xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;
xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;
我就直接选择springboot的执行器了
打开xxl-job-admin模块,在application.properties中进行后台的配置
注意在数据库地址哪里加上时区属性,否则乱码
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8&serverTimezone=UTC
还需要注意报警邮箱的配置
1.xxl-job框架中提供了报警邮箱设置,即调度任务失败是,可以把错误日志发送指定的负责人,通知他们去处理,spring-mail-username为邮箱地址,如果这配置的不是qq邮箱,而是其他例如139邮箱等,这里的spring.mail.password即为邮箱的密码,但是如果这里提供的是qq邮箱,这里spring.mail.password并非邮箱的密码,而是你邮箱的授权码,授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。在调度任务失败的时候,如果配置的授权码不正确则在控制台会报错,错误信息中心会提示你访问链接 https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256 点开这个链接,里面就有教
# web port
server.port=8081
spring.application.name=xxl-job-executor-demo
# no web
#spring.main.web-environment=false
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8086/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=
### xxl-job executor appname
xxl.job.executor.appname=${spring.application.name}
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=${server.port}
### xxl-job executor log-path
xxl.job.executor.logpath=E:\\gitload_pro\\xxl-job\\log
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=1
在下面那这个地址就是xxl-job的后台:
先启动admin模块,在启动执行器模块。
然后我们启动XxlJobAdminApplication类和XxlJobExecutorApplication,访问http://localhost:8080/xxl-job-admin 默认账户admn,密码123456
配置成功执行器,就会看到下图,要不然online及其地址是空的(可能会看不到自己配置的执行器,可以手动添加不输入地址,默认会自动寻找对于执行器的地址的)
注意:对于执行器模块的配置文件我们可以修改几个点来解决同名,同端口的情况
定位到springboot模块下的jobhandler层下面
package com.xxl.job.executor.service.jobhandler;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import org.springframework.stereotype.Component;
/**
* @author fueen
* 编写自己的定时任务Handler
* 继承IJobHandler
*
*/
@JobHandler(value = "MyJobHandler")
@Component
public class MyJobHandler extends IJobHandler {
/**
* 重写execute方法,里面执行相应的功能
* @param param
* @return
* @throws Exception
*/
@Override
public ReturnT execute(String param) throws Exception {
System.out.println("我们不能失去信仰");
return SUCCESS;
}
}
@Component
// @JobHandler("MyJobhandler")
public class MyJobhandler extends IJobHandler {
@XxlJob("MyJobhandler")
public void execute() throws Exception {
System.out.println("+++++++++++++++++++++++");
}
}
在任务管理里面新增任务
第一个:拿去第一个执行器来执行
分片广播
故障转移
忙碌转移
主要选bean
然后在找到刚刚添加的任务,点击操作里面的启动
com.xuxueli
xxl-job-core
2.3.0
将xxl-job-executor-sample-springboot这个模块下的XxlJobConfig复制一份到项目中,然后将相关配置设置好即可。
注意,需要有admin模块才行哦!