XXL-JOB一个分布式任务调度平台

发布时间:2023-10-17 13:00

哈哈哈哈,我又回来了!!!
之前因为换工作,和入职熟悉项目,已经停更了近两个月,说好的产出优质内容,怎么能停下来呢,所以之后无重大原因,还是会持续输出的。
话不多讲,直接进入主题 ----- xxl-job 定时任务

1.1 定时任务是啥?

定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券;比如在保证最终一致性的场景中,往往利用定时任务调度进行一些比对工作;比如一些定时需要生成的报表、邮件;比如一些需要定时清理数据的任务等。

1.2 xxl-Job是个什么东西呢?》

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。它的有两个核心模块,一个模块叫做调度中心,另外一个模块叫做执行器,它把任务调度和任务执行分成两个部分。这样调度模块只需要负责任务的调度属性,触发调度信号。执行模块只需要接收调度信号,去执行具体的业务逻辑,两者可以各自的进行扩容和缩容。

XXL-JOB一个分布式任务调度平台_第1张图片

架构图
XXL-JOB一个分布式任务调度平台_第2张图片
1.2.1 使用 xxl-job >>【springboot 集成】

xxjob下载源码

github地址:https://github.com/xuxueli/xxl-job/

码云地址:https://gitee.com/xuxueli0323/xxl-job

项目架构
XXL-JOB一个分布式任务调度平台_第3张图片
执行sql
XXL-JOB一个分布式任务调度平台_第4张图片

1.2.2 xxl-job 操作界面

项目浏览器访问地址 :http://127.0.0.1:8080/xxl-job-admin/jobinfo
用户名: admin
密码 : 123456

XXL-JOB一个分布式任务调度平台_第5张图片
XXL-JOB一个分布式任务调度平台_第6张图片
创建定时任务
XXL-JOB一个分布式任务调度平台_第7张图片
创建执行器
XXL-JOB一个分布式任务调度平台_第8张图片
1.2.3 操作界面不过多赘述 — springboot 整合

引入核心依赖 【版本可自选】


    com.xuxueli
    xxl-job-core
    2.2.0

application.yml 配置
XXL-JOB一个分布式任务调度平台_第9张图片

xxljob:
  adminAddresses: http://127.0.0.1:8080/xxl-job-admin
  appname: taoci-service
  accessToken: ''
  logPath: /${spring.application.name}/${logging.file.path}/job/jobhandler/
  logRetentionDays: 30

对【application.yml 】文件配置引用

package com.taoci.taoci.stu.config;


import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import groovy.util.logging.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 定时任务配置
 *
 * @author lcc
 */
@Slf4j
@Configuration
@EnableConfigurationProperties(value = XxlJobProperties.class)
//@ConditionalOnProperty(value = "xxljob.enabled", havingValue = "true", matchIfMissing = true)
@ConditionalOnProperty(prefix = "xxljob", name = "enabled", havingValue = "true", matchIfMissing = true)
public class XxlJobConfiguration {


    private final XxlJobProperties xxlJobProperties;

    public XxlJobConfiguration(XxlJobProperties xxlJobProperties) {
        this.xxlJobProperties = xxlJobProperties;
    }

    @Bean
    @ConditionalOnClass()
    public XxlJobSpringExecutor xxlJobExecutor() {

        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());
        xxlJobSpringExecutor.setAppname(xxlJobProperties.getAppname());
        //xxlJobSpringExecutor.setIp(xxlJobProperties.getIp());
        //xxlJobSpringExecutor.setPort(xxlJobProperties.getPort());
        xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());
        xxlJobSpringExecutor.setLogPath(xxlJobProperties.getLogPath());
        xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getLogRetentionDays());
        return xxlJobSpringExecutor;
    }
}
package com.taoci.taoci.stu.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "xxljob")
@Data
public class XxlJobProperties {

    private String adminAddresses;

    private String appname;

    private String ip;

    private int port;

    private String accessToken;

    private String logPath;

    private int logRetentionDays;
}

Java中定时任务具体实现

package com.taoci.taoci.stu.task;

import com.taoci.taoci.stu.service.ClassService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @Description: 修改班级信息任务
 * @Author: liaocongcong
 * @Date: 2022/5/22 15:13
 */
@Component
@Slf4j
public class ClassHandlerUpdateClassTask extends IJobHandler {
    @Autowired
    private ClassService classService;

    @XxlJob(value = "classHandlerUpdateClassTask") 
    @Override
    public ReturnT<String> execute(String s) {
        log.info("-------------开始修改班级信息任务-----------");
        try {
            classService.updateClassTask();
        } catch (Exception e) {
            log.error("修改班级信息任务任务失败 :{}", e);
            return ReturnT.FAIL;
        }
        log.info("-------------班级信息任务修改完成-----------");
        return ReturnT.SUCCESS;
    }
}

XXL-JOB一个分布式任务调度平台_第10张图片
xxl-job 优势

  1. 中国本地开发,适合中国国情,使用公司,大小公司都有,项目开源,并且稳定
  2. 支持集群部署;提供运维界面维护成本小;自带错误预警;相对elastic-job来说不需要额外的组件(zookeeper);支持调度策略;支持分片;文档齐全

主要有操作界面,可以实时观察执行日志,可以手动开启任务,极大方便部署之后,通过界面来操作,无需代码重新接入。
XXL-JOB一个分布式任务调度平台_第11张图片
缺点:相对Quartz来说需要多部署调度中心 【服务器资源问题了】

@lcc 冲呀,向阳而生

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号