XXL-Job的基本使用

一、市面上常见的任务调度产品

针对分布式任务调度的需求,市场上出现了很多的产品:

其中XXL-job 是我们经常使用的任务调度平台,XXL 这三个英文字母.是以作者名许雪里命名的。

可以前往 Gitee 地址进行下载使用

java 复制代码
https://gitee.com/xuxueli0323/xxl-job.git

二、XXL-JOB的基本使用

Gitee地址下载完XXL-job 的项目后,项目的结构如下:

2.1、启动xxl-job-admin服务

首先启动**xxl-job-admin,**并在配置文件中修改对应的端口号以及虚拟路径,配置文件中部分默认的参数如下:

xxl-job-admin 服务是XXL-JOBweb 页面端,所以启动完xxl-job-admin服务后,可以访问:

http://localhost:8080/xxl-job-admin/

账号:admin

密码:123456

2.2、登陆xxl-job的web页面

2.2.1、执行器管理

执行器管理页面中有一个默认的执行器xxl-job-executor-sample,下面来介绍如何编辑执行器。

AppName 是执行器的唯一标示 ,所以不能重复

名称可以自己随便写,但是最好见名知意,帮助我们快速的了解这个执行器的作用。

注册方式是调度中心获取执行器地址的方式 ,一般选自动注册。

自动注册和手动录入的区别:

总结:

2.2.2、任务管理

任务管理页面是用来编辑任务执行的,下面来介绍如何编辑任务管理。

执行器 :每一个任务要对应一个执行器,所以要选择一个执行器,可供选择的执行器,就是在2.2.1中编辑好的执行器。

任务描述:此次任务的作用是什么。

负责人:这个任务的负责人是谁。

调度类型:CRON、无、固定速度

CRON:是通过CRON表达式来控制任务调用的时间,这个在后面会做一个详细的介绍。

:不调用

固定速度:以固定的时间进行调用,例如每隔5秒进行调用,这个通过CRON表达式也能实现,所以不推荐使用固定速度。

运行模式 :运行模式主要分为BEANGLUEBEAN 是通过java代码 进行运行,GLUE是通过脚本的方式进行运行(有些银行的就是采用这种方式)

JobHander:运行模式采用BEAN ,右边就会出现JobHander,JobHander 中的值可以任意写 ,但是要和代码中的值保持一致,代码中通过**@XxlJob注解和JobHander中的值相对应**。

路由策略:

当执行器集群部署时,提供丰富的路由策略

阻塞处理策略:调度过于密集执行器来不及处理时的处理策略

2.3、启动xxl-job-executor-sample-springboot

xxl-job-executor-sample-springboot 中配置文件里面需要注意的有:

xxl.job.admin.addresses:对应2.1中web页面的IP地址、端口号、虚拟路径等

xxl.job.executor.appname: 对应2.2.1 中执行器的AppName

xxl.job.executor.port:对应执行器的端口号(和server.port中的端口号不一样)。

xxl-job-executor-sample-springboot中可以看见XxlJobConfig用来读取配置文件中的值

java 复制代码
package com.xxl.job.executor.core.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 config
 *
 * @author xuxueli 2017-04-28
 */
@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;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */


}

SampleXxlJob类中,用来执行任务。

java 复制代码
@Component
public class SampleXxlJob {
    private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);


    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");

        for (int i = 0; i < 5; i++) {
            System.out.println("执行了第"+i+"次");
            //XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        // default success
    }
}

SampleXxlJob中@XxlJob 的值要和2.2.2任务管理中JobHander的值保持一致。再启动xxl-job-executor-sample-springboot服务。

启动了xxl-job-executor-sample-springboot 服务以及xxl-job-admin 服务后,在任务管理页面点击执行一次,即可发起调用。

发现调用成功

三、 Corn表达式

2.2.2中可以通过Corn表达式来控制任务调度的时间,以下是Corn表达式中符号的含义

以下面这个 Corn表达式为例

6-21:在时域,表示从早上6点到晚上9点执行。("-":指定一个范围,可以看上表)

0/5:在分域,表示每5分钟执行一次。("/":表示递增,可以看上表)

0:在秒域,表示第0秒执行。

连起来就是:早上6点到晚上9点这个时间段内,每隔5分钟执行一次。

例如:06:05:00、06:10:00、06:15:00、06:20:00、06:25:00,一直执行到晚上9点55分。

另外:我后面在天域和月域中设置了通配符"*",表示每月的每天执行。所以就是永远在执行,所以在年域和周域用"?","不指定"也不影响。

相关推荐
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王6 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342737 小时前
Java实现离线身份证号码OCR识别
java·开发语言