Spring Boot 集成 xxl-job任务调度中心

1,272 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

简介

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

特性

  • 简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;

  • 动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;

  • 调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;

  • 执行器HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行HA;

  • 注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;

  • 弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;

XXL-JOB架构

图片.png

集成步骤

执行脚本

从官网gitee.com/xuxueli0323… 下载源码,执行源码中doc/db/tables_xxl_job.sql的脚本,执行后的表结构如下:

图片.png

修改配置信息

下载XXL-job-admin工程,修改application.properties中的数据库连接配置和邮箱配置

图片.png

图片.png

启动xxl-job-admin项目

系统运行成功后,访问localhost:8080/xxl-job-admin效果如下

图片.png

配置xxl-job客户端执行器

添加依赖

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

修改配置

在yml配置文件中添加xxl配置

xxl:
  job:
    admin:
      # 管理台地址
      addresses: http://localhost:8080/xxl-job-admin
    accessToken:
    executor:
      # 当前项目名称
      appname: test
      address:
      ip:
      port: 9998
      logpath:
      logretentiondays: 30

添加config配置

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

新增任务

@Component
public class SendEmailJob
{
    private Logger logger = LoggerFactory.getLogger(SendEmailJob.class);
    
    @XxlJob("sendEmailJob")
    public void sendEmail()
    {
        logger.info("send email start..");
    }
}

新增执行器

  • AppName:AppName的名称
  • 名称:执行器名称
  • 注册方式:选择手动录入
  • 机器地址:填写的为本地的ip地址和yml文件中配置的端口

图片.png

配置任务

  • 执行器:选择新增的执行器,默认选择的是示例执行器
  • 调度类型:Cron表达式
  • JobHandler:xxljob注解中定义的
  • 运行模式:bean模式

图片.png

启动执行器项目

[Thread-5] INFO  [] com.xxl.job.core.server.EmbedServer - >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9998

表示执行器已经注册成功。

启动任务

图片.png

选择启动选项,启动成功后出现定时任务执行的日志信息,如果已经启动成功,则变成停止选项

 2022-04-09 17:35:30.280 [Thread-8] INFO  [] com.skywares.xxjob.job.SendEmailJob - send email start..

也可以查看调度日志

图片.png

常见错误

XXL-JOB调度失败:执行器地址为空

执行任务时,检查执行器选择是否正确,需要选择自定义的执行器。

xxl-rpc remoting fail, StatusCode(404) invalid

检查新增执行器的执行地址是否填写正确,地址和IP都是在yml进行配置的

结语

本文介绍了SpringBoot集成XXL-Job基本功能,关于XXL-Job的高级特性和原理将在后续的文章中进行详细讲解。