首页 > 其他分享 >xxl-job基本使用

xxl-job基本使用

时间:2023-06-23 17:55:07浏览次数:39  
标签:基本 执行器 admin private job import xxl

xxl-job-admin(调度中心)搭建

docker arm64架构镜像构建

由于官方没有构建arm64架构的docker镜像,只好自己构建了,下面是详细步骤。

  1. 下载源码进行构建,下载地址

  2. 构建jar包,进入xxl-job-admin模块根目录

    mvn package -Dmaven.test.skip=true
    
  3. 在xxl-job-admin模块根目录已经写好了Dockfile,进入该目录构建即可。

    docker build -t wastonl/xxl-job-admin:2.4.0 .
    

docker部署

  1. 在下载的源码目录找到db脚本,执行。(官方只支持MySQL)

  2. 执行命令

    docker run -d \
    	--name xxl-job-admin \
    	-e PARAMS="--spring.datasource.url=jdbc:mysql://host.docker.internal:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456" \
    	-p 9080:8080 \
    	wastonl/xxl-job-admin:2.4.0
    
  3. 查看运行日志,出现>>>>>>>>> init xxl-job admin scheduler success,即部署成功

  4. 访问http://localhost:9080/xxl-job-admin,默认登录账号 admin/123456

重要表介绍

  1. xxl_job_group

    用来存储执行器配置信息,如果执行器是自动注册,那么address_list字段由调度中心的后台线程根据注册信息自动更新进去的,每次更新间隔为30s。

    注:执行器自动注册时只会新增注册信息,不会往这张表插入记录,因此需要在调度中心手动新增执行器基本信息。

  2. xxl_job_info

    用于存储任务配置信息

  3. xxl_job_registry

    执行器自动注册的注册信息,保存执行器的地址(ip、port)

使用

执行器新增以及注册

第一步,在任务调度中心-》执行器管理界面新增一个执行器,如图所示

点击保存,则会将信息保存到xxl_job_group表中。

第二步,编写执行器,会与调度中心xxl-job-admin建立长连接,维持心跳,将注册信息保存到xxl_job_registry表中。调度中心的后台线程每隔30s会从这个表中取到真实的地址信息更新到xxl_job_group表中的address_list字段中,同时该任务会删除掉下线的执行器的注册信息。

application.yml配置信息如下

xxl:
  job:
    # 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔
    admin-addresses: http://127.0.0.1:9080/xxl-job-admin
    # 执行器通讯TOKEN [选填]:非空时启用
    access-token: default_token
    executor:
      # 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
      appname: spring-default-executor
      # 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址
      address:
      # 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用
      ip:
      # 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口
      port: 9999
      logpath: ./xxl-job/jobhandler
      logretentiondays: 30

XxlJobConfig.java

package com.wangtao.task.simple.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Slf4j
@EnableConfigurationProperties(XxlJobProperties.class)
@Configuration
public class XxlJobConfig {

    @Autowired
    private XxlJobProperties xxlJobProperties;

    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        log.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());
        xxlJobSpringExecutor.setAppname(xxlJobProperties.getExecutor().getAppname());
        xxlJobSpringExecutor.setAddress(xxlJobProperties.getExecutor().getAddress());
        xxlJobSpringExecutor.setIp(xxlJobProperties.getExecutor().getIp());
        xxlJobSpringExecutor.setPort(xxlJobProperties.getExecutor().getPort());
        xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());
        xxlJobSpringExecutor.setLogPath(xxlJobProperties.getExecutor().getLogPath());
        xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getExecutor().getLogRetentionDays());
        log.info(">>>>>>>>>>> xxl-job config end.");
        return xxlJobSpringExecutor;
    }
}

XxlJobProperties.java

package com.wangtao.task.simple.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

@Setter
@Getter
@ConfigurationProperties(prefix = "xxl.job")
public class XxlJobProperties {

    private String adminAddresses;

    private String accessToken;

    @NestedConfigurationProperty
    private ExecutorInfo executor;

    @Setter
    @Getter
    static class ExecutorInfo {

        private String appname;

        private String address;

        private String ip;

        private int port;

        private String logPath;

        private int logRetentionDays;
    }
}

将Spring Boot项目启动后,稍等片刻,再次查询

任务编写及配置

第一步,编写任务执行逻辑

SimpleJob.java

package com.wangtao.task.simple.job;

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

@Slf4j
@Component
public class SimpleJob {

   /**
    * 使用XxlJob注解标注一个具体任务的执行逻辑,注解里面的名称等会在配置任务时需要使用到
    */
    @XxlJob("helloXxlJob")
    public void helloXxlJob() {
        log.info("Hello XXL-JOB!");
    }
}

第二步,在调度中心-》任务管理界面新增任务配置

如果所示

执行器选择我们上面新增好的默认执行器,调度配置使用cron表达式,运行模式选择BEAN,JobHandler输入@XxlJob注解指定的名称即可。该配置表示每一分钟执行一次。

新建完了之后,我们可以点击执行一次操作,让任务立马执行一次。也可以让任务变成启动状态,这样就会按照cron表达式的语义去执行任务了。

注:必须让任务变成启动状态,调度中心才会去调度它。

标签:基本,执行器,admin,private,job,import,xxl
From: https://www.cnblogs.com/wt20/p/17499445.html

相关文章

  • mongodb-crud基本操作
    删库>db.dropDatabase()创建集合(表)>db.createCollection('a')>db.createCollection('b')直接插入文档,集合会自动创建>db.c.insert({username:'mongodb'})>showcollections删除集合>db.a.drop()重命名集合>db.b.renameCollec......
  • Python基于Socket编写TcpServer通信基本框架
    如下主要是实现单客户端连接通信,如下为Socket模块的常用属性和方法介绍。如要实现多客户端连接,请使用threading模块的多线程技术实现。属性:•socket.AF_INET:IPv4地址族。•socket.AF_INET6:IPv6地址族。•socket.SOCK_STREAM:TCP协议类型。•socket.SOCK_DGRAM:UDP协议类......
  • HTML-----------HTML基本格式
    1、<!DOCTYPE><!DOCTYPE>位于文档的最前面,用于向浏览器说明当前文档使用那种HTML或XHTML标准规范。只有在开头处使用<!DOCTYPE>声明,浏览器才能将该文档作为有效的HTML文档,并按指定的文档类型进行解析。2、<html><html>位于<!DOCTYPE>之后,也被称为跟标签。跟标签主要用......
  • Java基础之基本数据类型封装类的缓存
    巨人的肩膀:https://blog.csdn.net/hnjcxy/article/details/1237872091、Java中基本数据类型byte、short、char、int、long、float、double、boolean有对应的封装类型:Byte、Short、Character、Integer、long、Float、Double,Boolean其中Byte、Short、Character、Integer、Long、Bo......
  • 【2】springCloud 2021 中间件基本使用方法
    RabbitMQBroker异步调用好处:吞吐量提升:无需等待订阅者处理完成,响应更快速故障隔离:服务没有直接调用,不存在级联失败问题调用间没有阻塞,不会造成无效的资源占用耦合度极低,每个服务都可以灵活插拔,可替换流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自......
  • 9个精品AI开源免费实战项目助你掌握AI工程师基本技能
        通过这9个精品AI开源免费实战项目,助你胜任一份人工智能工程师的岗位。基础篇如何实现人工智能贪吃蛇    每个人的心中都有一段贪吃蛇的记忆。我小时候就在想,如何能够让贪吃蛇自己玩呢?让我们一起打开人工智能贪吃蛇的世界。    链接:https://github.com/Fabsqrt/B......
  • cmd基本命令
    创建文件:1.copycon文件名.后缀2.编辑文件内容3.crty+z结束文字编写 查看文件内容:type 文件名.后缀 分页查看文件内容:type 文件名.后缀|more 删除文件:del文件名.后缀 修改文件夹属性:attrib+h+s+a文件夹名h为......
  • 跟我一起学Redis之五种基本类型及其应用场景举例
    前言来啦,老弟?来啦,上一篇就当唠唠嗑,接下来就开始进行实操撸命令,计划是先整体单纯说说Redis的各种用法和应用,最后再结合代码归纳总结。Redis默认有16个数据库(编号为0~15),默认使用第0个,通过命令select任意切换数据库,和MySql切换数据库一个道理;各数据库之间的数据是隔离的,先启动服......
  • Java 基本数据类型 - 四类八种
    感谢:https://zhuanlan.zhihu.com/p/25439066八种基本数据类型分成四个大类1、整型byte、short、int、long2、浮点型float、double3、字符型char4、布尔型boolean数据类型详细介绍整型(byte、short、int、long)虽然byte、short、int、long数据类型都......
  • cmake简介及基本使用说明
    CMAKE是一个开源、跨平台的编译、测试和打包工具,它使用比较简单的语言描述编译、安装的过程,输出Makefile或者project文件,再去执行构建。在linux环境下编写C++程序是没有类似windows下编译器的一键编译和运行的按钮,只能由开发人员进行手动编译、运行;当多人协同开发一个较大的项目......