xxl-job分布式任务调度平台和SpringBoot的简单整合

一、xxl-job概述

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

二、xxl-job使用

三、整合SpringBoot项目

  • 引入Maven依赖
    <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version> </dependency>

  • 创建XxlJobConfig配置类

    点击查看代码
    package com.example.rest.config;
    
    import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * xxl-job依赖配置
     */
    @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;
        }
    }
    
     
  • 修改yml配置文件

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

    注:如果将配置在ncaos中进行配置,需将xxl.job.accessToken等默认为空的配置赋予空字符串"",否则会报Could not resolve placeholder ‘xxl.job.accessToken’ in value “${xxl.job.accessToken}”错误(在本地配置文件中配置则不需要)

  • 编写测试类

    点击查看代码
    package com.example.rest.jobHandler;
    
    import com.xxl.job.core.handler.annotation.XxlJob;
    import org.springframework.stereotype.Component;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * xxl-job测试类
     */
    @Component
    public class XxlJobTest {
    
        @XxlJob("testXxlJob")
        public void testJobHandler() throws InterruptedException {
    
            for (int i = 0; i < 5; i++) {
                System.out.println("ok");
                TimeUnit.SECONDS.sleep(1);
            }
        }
    }
    
     
  • 启动服务,先启动xxl-job-admin模块,再启动自己的springBoot服务(因为xxl-job-admin模块的端口为8080,所以需修改本地的端口,否则会报错)

  • 任务调度中心,配置服务

    1. 新增执行器

    2. 新增任务


    3. 执行任务(本地测试点击执行一次即可,如项目运行,点击启动)

    4. 执行结果

到这里,XXL-JOB 与 SpringBoot的简单整合就完成了

相关文章

今天小编给大家分享的是Springboot下使用Redis管道(pipeline...
本篇文章和大家了解一下springBoot项目常用目录有哪些。有一...
本篇文章和大家了解一下Springboot自带线程池怎么实现。有一...
这篇文章主要介绍了SpringBoot读取yml文件有哪几种方式,具有...
今天小编给大家分享的是SpringBoot配置Controller实现Web请求...
本篇文章和大家了解一下SpringBoot实现PDF添加水印的方法。有...