一文带你入门xxl-job

一、源码启动xxl-job

1.xxl-job 源码下载地址

https://github.com/xuxueli/xxl-job/releases/tag/2.3.0

2.执行数据库脚本

在这里插入图片描述

表说明:

- xxl_job_group:执行器信息表,用于维护任务执行器的信息
- xxl_job_info:调度扩展信息表,主要是用于保存xxl-job的调度任务的扩展信息,比如说像任务分组、任务名、机器的地址等等
- xxl_job_lock:任务调度锁表
- xxl_job_log:日志表,主要是用在保存xxl-job任务调度历史信息,像调度结果、执行结果、调度入参等等
- xxl_job_log_report:日志报表,会存储xxl-job任务调度的日志报表,会在调度中心里的报表功能里使用到
- xxl_job_logglue:任务的GLUE日志,用于保存GLUE日志的更新历史变化,支持GLUE版本的回溯功能
- xxl_job_registry:执行器的注册表,用在维护在线的执行器与调度中心的地址信息
- xxl_job_user:系统的用户表

3.修改xxl-job-admin配置文件applicationk.properties的数据库链接

在这里插入图片描述

4.修改xxl-job-admin配置文件application.propertiesk中xxl-job的token值(客户端访问请求需要配置访问token)也可以不设置。

在这里插入图片描述

5.启动 xxl-job-admin 之后访问地址,http://localhost:8080/xxl-job-admin/toLogin ,账号admin 密码123456

二、创建springboot工程

1.引入maven配置

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

2.在application.properites 文件中添加配置属性,xxl.job.accessToken需要和上面xxl-job配置的一致。

logging.config=classpath:logback.xml
#调度中心部署地址,多个配置逗号分隔 "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
#执行器token,非空时启用 xxl-job, access token
xxl.job.accessToken=123456
# 执行器app名称,和控制台那边配置一样的名称,不然注册不上去
xxl.job.executor.appname=demo-xxl-job
# [选填]执行器注册:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。
#从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
#[选填]执行器IP :默认为空表示自动获取IP(即springboot容器的ip和端口,可以自动获取,也可以指定),多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务",
xxl.job.executor.ip=
# [选填]执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
#执行器日志文件存储路径,需要对该路径拥有读写权限;为空则使用默认路径
xxl.job.executor.logpath=/data/logs/xxl-job/executor
#执行器日志保存天数
xxl.job.executor.logretentiondays=30

3.创建XxlJobConfig 配置类

package com.ybe.demoxxljob.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;

@Configuration
public class XxlJobConfig {
    private Logger log = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @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.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}

4.创建定时任务,@XxlJob特性中的value 在xxl-job-admin配置界面中用到。

package com.ybe.demoxxljob.job;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MyJobHandler {
    
    private Logger log = LoggerFactory.getLogger(MyJobHandler.class);
	//demoJobHandler 需要在xxl-job-admin的新增任务中配置为JobHandler的值
    @XxlJob(value = "demoJobHandler", init = "init", destroy = "destroy")
    public ReturnT<String> execute() {

        log.info(" execute 任务触发成功:" + LocalDateTime.now());

        return ReturnT.SUCCESS;
    }
    
    private void init() {
        log.info("init 方法调用成功");
    }

    private void destroy() {
        log.info("destroy 方法调用成功");
    }
}

5.在resource目录下创建日志文件 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">

    <contextName>logback</contextName>
    <property name="log.path" value="/data/logs/xxl-job/app.log"/>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

</configuration>

三、创建xxl-job任务

1.进入xxl-job-admin的执行器管理菜单

在这里插入图片描述

2.点击新增按钮,其中AppName需要和springboot工程配置文件中的xxl.job.executor.appname值一样。选择默认的自动注册。
在这里插入图片描述

3.进入任务管理界面,选择刚才创建的执行器(demo-xxl-job)

在这里插入图片描述

4.点击新增按钮,界面中JobHandler的值配置为 demoJobHandler(@XxlJob中的value);路由策略选择第一个;Cron表示定时策略。
在这里插入图片描述

5.手动启动上面新增的任务

在这里插入图片描述

6.启动刚才创建的springboot应用,检查应用是否注册成功

在这里插入图片描述

7.查看调度日志

在这里插入图片描述

四、xxl-job-admin集群

原理:xxl-job-admin的集群就是启动多个xxl-job-admin服务节点,并且所有节点都共用一个数据库。在节点调度任务的时候会通过数据库锁来控制调度器的并发执行。如果一个节点挂了,不会影响其他节点运行。客户端使用xxl-job的集群需要在配置文件中配置多个xxl-job-admin节点地址。

1.修改xxl-job-admin配置文件的服务器端口,然后启动。新增一个8081的xxl-job-admin节点。加上之前启动的8080节点构成一个集群。

server.port=8081

2.修改springboot工程代码的 application.properties 文件

#调度中心部署地址,多个配置逗号分隔 "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin,http://127.0.0.1:8081/xxl-job-admin

3.启动springboot工程,然后关闭8080节点。检查springboot中的任务是否还在执行。如果还在执行说明连接集群成功。

五、分片任务

​ 如果任务的路由策略选择【分片广播】,那么调度器在执行一次任务调度时,将会对所有已经连接好的执行器都进行调度,同时系统自动传递分片参数,执行器可根据分片参数开发分片任务。

分片任务两个关键参数是:

// 当前分片数,从0开始,即执行器的序号
int shardIndex = XxlJobHelper.getShardIndex();
//总分片数,执行器集群总机器数量
int shardTotal = XxlJobHelper.getShardTotal();

1.在springboot工程中的MyJobHandler添加分片任务代码

@XxlJob("shardingJobHandler")
public void shardingJobHandler() throws Exception {
    // 当前分片数,从0开始,即执行器的序号
    int shardIndex = XxlJobHelper.getShardIndex();
    //总分片数,执行器集群总机器数量
    int shardTotal = XxlJobHelper.getShardTotal();
    XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);
    // 业务逻辑
    for (int i = 0; i < shardTotal; i++) {
        if (i == shardIndex) {
            log.info("第 {} 片, 命中分片开始处理", i);

        } else {
            log.info("第 {} 片, 忽略", i);
        }
    }
}

2.在xxl-job-admin中添加分片任务

在这里插入图片描述

3.启动多个springboot实例,修改 application.properties 文件中的server.port 端口和 xxl.job.executor.port 端口然后启动。检查是否注册成功。

在这里插入图片描述

4.执行刚创建的分片任务
在这里插入图片描述

5.检查springboot每个实例是否执行任务,并且输出参数。

在这里插入图片描述

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值