SpringBoot整合XXL-JOB

288 阅读2分钟

1、XXL-JOB是什么

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

2、文档地址

官网 www.xuxueli.com/xxl-job/

github github.com/xuxueli/xxl…

gitee gitee.com/xuxueli0323…

3、通过docker安装

前文已经介绍过通过docker安装xxl-job教程,请参考docker安装XXL-JOB

4、整合

pom依赖

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

yml配置文件

spring:
  application:
    name: springboot-demo

#端口
server:
  port: 8080

#xxl-job
xxl:
  job:
    # 执行器通讯TOKEN [选填]:非空时启用 系统默认 default_token
    accessToken: default_token
    admin:
      # 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。
      addresses: http://81.68.97.33:8090/xxl-job-admin
    executor:
      # 执行器注册 [选填]:优先使用该配置作为注册地址
      address:
      # 执行器的应用名称
      appname: demo
      # 执行器IP [选填]:默认为空表示自动获取IP
      ip:
      # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath: /data/applogs/xxl-job/test
      # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 30
      # 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999
      port: 9999

创建xxl-job配置类

package com.example.springbootdemo.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import com.xxl.job.core.util.IpUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <p>
 *  xxl-job配置类
 * </p>
 *
 * @author yurenwei
 * @since 2023/9/22
 */
@Slf4j
@Configuration
public class XxlJobConfig {
    @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() {
        log.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(IpUtil.getIp());
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }

}

创建执行器的任务类

package com.example.springbootdemo.task;

import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * <p>
 *  demo任务
 * </p>
 *
 * @author yurenwei
 * @since 2023/9/22
 */
@Slf4j
@Component
public class DemoTask {

    @XxlJob("demoJobHandler")
    public void demoJobHandler(){
        log.info("----------xxl-job test---------------");
    }

}

登录xxl-job-admin客户端,在执行器管理新增执行器

新增

image.png

image.png

执行器列表多一条数据,执行器demo已被添加

image.png 此时并没有机器注册

将本地项目打包上传到linux服务器

java -jar springboot-demo-0.0.1-SNAPSHOT.jar image.png

启动项目

image.png 项目成功启动

查看本地机器是否注册到xxl-job-admin上

image.png

image.png

注册成功

新增任务

在xxl-job-admin的任务管理中,新增一条任务

image.png

image.png 我配置的每隔3秒执行一次

启动任务

image.png 查看日志

image.png 发现定时任务已被成功执行,每隔3秒执行一次

停止任务

image.png

image.png

image.png 查看项目日志发现任务不在执行

调度日志

image.png 这里面可以查看每个任务的执行情况

至此,SpringBoot整合XXL-JOB结束了,其他更多的用法可以参考官网。