IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> XXL-JOB一个分布式任务调度平台 -> 正文阅读

[Java知识库]XXL-JOB一个分布式任务调度平台

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

1.1 定时任务是啥?

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

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

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

在这里插入图片描述

架构图
在这里插入图片描述
1.2.1 使用 xxl-job >>【springboot 集成】

xxjob下载源码

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

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

项目架构
在这里插入图片描述
执行sql
在这里插入图片描述

1.2.2 xxl-job 操作界面

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

在这里插入图片描述
在这里插入图片描述
创建定时任务
在这里插入图片描述
创建执行器
在这里插入图片描述
1.2.3 操作界面不过多赘述 — springboot 整合

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

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

application.yml 配置
在这里插入图片描述

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 优势

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

主要有操作界面,可以实时观察执行日志,可以手动开启任务,极大方便部署之后,通过界面来操作,无需代码重新接入。
在这里插入图片描述
缺点:相对Quartz来说需要多部署调度中心 【服务器资源问题了】

@lcc 冲呀,向阳而生

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 17:59:01  更:2022-05-24 18:02:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:13:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码