XXL-JOB的使用(详细教程)

官网: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替换掉了

  • @JobHandler 只能作用在类上,切该类还要实现某一个类
  • @XxlJob 针对的是方法

二、XXL-JOB介绍

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用

2.1 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服务,可根据业务事件灵活触发

2.2原理

XXL-JOB的使用(详细教程)_第1张图片

三、xxl-job的使用

3.1第一步:建表

用上面的源码链接,拉取代码下来后,
然后运行自带的tables_xxl_job.sql文件,在Navcation中去运行,生成需要的表

XXL-JOB的使用(详细教程)_第2张图片

XXL-JOB的使用(详细教程)_第3张图片
XXL-JOB的使用(详细教程)_第4张图片

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的执行器了

3.2 第二步:配置文件

3.2.1 admin模块的配置文件

打开xxl-job-admin模块,在application.properties中进行后台的配置

XXL-JOB的使用(详细教程)_第5张图片
XXL-JOB的使用(详细教程)_第6张图片

XXL-JOB的使用(详细教程)_第7张图片

注意在数据库地址哪里加上时区属性,否则乱码

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 点开这个链接,里面就有教

3.2.2 执行器模块的配置文件

XXL-JOB的使用(详细教程)_第8张图片

XXL-JOB的使用(详细教程)_第9张图片

# 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的使用(详细教程)_第10张图片

在下面那这个地址就是xxl-job的后台:
XXL-JOB的使用(详细教程)_第11张图片
先启动admin模块,在启动执行器模块。

然后我们启动XxlJobAdminApplication类和XxlJobExecutorApplication,访问http://localhost:8080/xxl-job-admin 默认账户admn,密码123456

XXL-JOB的使用(详细教程)_第12张图片
进来就可以看到主界面了

XXL-JOB的使用(详细教程)_第13张图片

配置成功执行器,就会看到下图,要不然online及其地址是空的(可能会看不到自己配置的执行器,可以手动添加不输入地址,默认会自动寻找对于执行器的地址的)

XXL-JOB的使用(详细教程)_第14张图片

3.3 拓展

注意:对于执行器模块的配置文件我们可以修改几个点来解决同名,同端口的情况

  1. 在执行器模块的配置文件 中 添加项目项目 ,然后把项目名称给执行器当名称,端口号公用,日志文件的存放地点更换
  2. 在执行器的配置类中,使端口号偏移1000
    XXL-JOB的使用(详细教程)_第15张图片

四、编写定时任务

定位到springboot模块下的jobhandler层下面

4.1老版本的用法:

XXL-JOB的使用(详细教程)_第16张图片

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;
    }
}


4.2新版本的用法:

@Component
// @JobHandler("MyJobhandler")
public class MyJobhandler extends IJobHandler {

    @XxlJob("MyJobhandler")
    public void execute() throws Exception {
        System.out.println("+++++++++++++++++++++++");
    }
}

在任务管理里面新增任务

XXL-JOB的使用(详细教程)_第17张图片

XXL-JOB的使用(详细教程)_第18张图片

五、其他

5.1对于路由策略:

第一个:拿去第一个执行器来执行
分片广播
故障转移
忙碌转移

5.2对于运行模式

XXL-JOB的使用(详细教程)_第19张图片

主要选bean

5.3阻塞策略

在这里插入图片描述

然后在找到刚刚添加的任务,点击操作里面的启动

XXL-JOB的使用(详细教程)_第20张图片
可以看到结果,刚刚编写的代码已经被执行了

XXL-JOB的使用(详细教程)_第21张图片

六、如何和springboot集成

第一步:依赖

 
            com.xuxueli
            xxl-job-core
            2.3.0
        

第二步

将xxl-job-executor-sample-springboot这个模块下的XxlJobConfig复制一份到项目中,然后将相关配置设置好即可。
注意,需要有admin模块才行哦!

你可能感兴趣的:(java,spring,boot)