spring boot项目集成xxljob

1、前言

  工作中肯定会遇到编写定时任务的场景,手动声明定时任务的cron表达式,改动执行时间需要改代码,想随时执行任务得手动调用方法,这些操作任务的方式比较不灵活,使用任务调度平台的话,则比较容易操作任何和变更。
  这里介绍如何接入任务调度平台XXL-JOB,选用这个平台主要是公司使用这个平台,比较熟悉。
官网概述:

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

官网:XXL开源社区
github:https://github.com/xuxueli/xxl-job

环境搭建包含3个模块:
1、xxljob项目的数据库
2、xxljob源码编译的xxl-job-admin项目
3、集成项目的xxl-job-core

系统环境

xxl-job版本:2.4.2
xxl-job:项目要求
Maven3+
Jdk1.8+
Mysql8.0+

2、clone项目和准备数据库

使用命令:

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

将项目clone到本地
在自己数据库工具,新建一个名字的xxl_job的数据库
或者mysql命令行使用sql语句创建:

create database xxl_job;

这个名字可以按照自己喜好起其他名字也行,这个数据库。
接着渠道xxl-job项目找到doc文件夹下面的db文件的tables_xxl_job.sql文件,在执行命令sql文件,即可完成数据库的建立。如果使用了其他数据库名字,改下sql文件的创建数据库语句即可。

3、admin项目的编译和启动

1、将xxl-job项目导入idea,将依赖下载完
2、修改application.properties的spring.datasource.url和账户密码等信息
3、使用maven编译出admin项目即可
在这里插入图片描述
打包前可以先运行下admin项目,直接访问下,看看是否正常,再执行打包。
在这里插入图片描述
本地测试地址为:http://127.0.0.1:你设置的端口/xxl-job-admin/
我的是:http://127.0.0.1:9898/xxl-job-admin/

由于项目是spring boot项目直接使用:

java -jar 打包出来的jar包路径/xxl-job-admin-2.4.2-SNAPSHOT.jar

在这里插入图片描述

4、项目添加xxl-job

给项目添加以下maven依赖:

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

在application.yaml添加如下配置:

xxl:
  job:
    admin:
      addresses: http://127.0.0.1:9898/xxl-job-admin
    accessToken: default_token
    executor:
      appname: xxlReport
      address:
      ip:
      port: 9998
      logpath: /data/log/xxl-report/xxl-job/jobhandler
      logretentiondays: 30

新建如下spring boot配置类,代码加载配置:

@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @Value("${xxl.job.executor.appname}")
    private String appname;
    @Value("${xxl.job.executor.address}")
    private String address;
    @Value("${xxl.job.executor.ip}")
    private String ip;
    @Value("${xxl.job.executor.port}")
    private int port;
    @Value("${xxl.job.executor.logpath}")
    private String logPath;
    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;
    @Bean
    public 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;
    }
}

启动时就会按照ip和端口去连接admin。
配置完成,后则需要编写任务代码:

@Component
public class SampleXxlJob {
    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        String param = XxlJobHelper.getJobParam();
        if (param != null && param.equals("1")) {
            XxlJobHelper.handleSuccess();
        } else {
            XxlJobHelper.handleFail();
        }
    }
}

服务端的代码就这么多了

5、admin项目执行任务

新增执行器:
在这里插入图片描述
选择执行器管理,点击新增,填写AppName、名称,注册方式选择手动注册,机器地址填写完整的http网址,以斜杠结尾,多个用逗号隔开。
点击任务管理器,选择之前新建的xxl-report执行器
在这里插入图片描述
点击新增,填上必填,里面的重点是cron表达式,填上对应的表达式,填上程序的JobHandler的名字,点击保存
在这里插入图片描述
启动任务则按照corn表达式调度,还能手动进行调度。
在这里插入图片描述
按照代码的param控制任务是否失败。实际业务则根据任务是否有错误信息,确认任务是否失败
在这里插入图片描述
到这里实践就结束了。

6、admin任务选项

6.1、基础配置

在这里插入图片描述
执行器:执行当前任务的服务列表,下拉选择执行器
任务描述:用于描述当前任务的文字
负责人:填上负责人
报警邮件:任务失败时,发送邮件到填写的邮件列表,多个则用逗号分隔
note:发送邮件需要指定发送邮件的配置,在admin项目里面设置相关邮件配置,并编译启动才能设置

6.2、调度配置

在这里插入图片描述
调度类型:其实默认使用cron就行
cron:cron表达式填写或者右边按钮选择,和代码的声明格式一致,不做赘述

6.3、任务配置

在这里插入图片描述
运行模式:bean就是运行spring的任务方法、其他选项则是对应语言的代码执行器,在xxl-job内置的ide里面写对应的代码
JobHandler:仅在bean模式生效
任务参数:填写任务执行过程中的参数,用于动态控制任务行为。比如传:stDate=2024-05-08 edDate=2024-05-08,这种键值对的值,进过解析后,用于控制报表任务跑时间区间的数据

6.4、高级配置

在这里插入图片描述
路由策略:就是怎么轮询执行器的注册地址列表的方式,见名知意,不做赘述
在这里插入图片描述
阻塞处理策略:
单机串行:等待上一个完成后面的才会执行,如果执行时间超过时间间隔则任务会一直堆积,如果只是时不时超时,任务还是会回到间隔内完成任务。
丢弃后续调度:如果任务执行时间超过间隔时间,则下一任务直接失败,让当前任务继续执行。
覆盖之前调度:如果任务执行时间超过间隔时间,则给当前任务发送InterruptedException,并标记为失败,下一任务开始执行,但是如果上一任务try catch了exception,没有处理InterruptedException,实际上一任务还是会执行

note:
对于执行时间不定的,但是最终会回到间隔内的任务,选用单机串行即可。
对于一直超过时间间隔的,那就是调整下corn的时间间隔解决。
对于需要知道任务是否会超时的,可以选后面两个,任务失败会发邮件提醒,知道任务失败,做出调整。
对于出现消息大面积堆积,可以使用丢弃后续调度,让后续任务默认失败,当不发失败告警时,说明系统已经处理完堆积的消息了,是个提醒的使用。

spring的demo地址:https://gitee.com/1099764422/xxl-report

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值