分布式定时任务xxl-job搭建使用教程

分布式定时任务xxl-job搭建使用教程

分布式定时任务xxl-job搭建使用教程

​ 一. 笔记初衷

​ 二. 搭建环境

​ 三. 搭建流程

​ 四. 遇见问题

一、笔记初衷

以前用的定时任务都是spring自带的定时器,虽然可以满足基本的开发需求,但是近几年的需求越来越灵活,越来越自动化,导致spring自带的定时器无法满足。所以我就在网上找寻资料,自己钻研,发现了一个很好用的分布式定时任务,可以实现动态的去实现定时任务,简单易上手。于是这章笔记就横空出世了😛

二、搭建环境

  1. win10电脑
  2. xxl-job官网使用教程:https://www.xuxueli.com/xxl-job/
  3. xxl-job源码下载地址:
    1. https://github.com/xuxueli/xxl-job
    2. http://gitee.com/xuxueli0323/xxl-job
  4. Maven3+
  5. Jdk1.8+
  6. Mysql5.7+

三、搭建流程

一、下载xxl-job源码(下载地址附上)

  1. 我下载的版本是2.2.0的版本,可以根据你自己在项目中的pom依赖来选择性的进行下载源码
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.2.0</version>
        </dependency>
  1. 源码下载之后找到doc-->db这个文件夹,把里面的sql文件拿出来执行一遍(记住要先创建数据库哦!!!)

  2. 然后再更改数据库连接信息

  3. 启动xxl-job项目,启动的是xxl-job-admin的model

二、创建springboot项目

创建springboot项目就不过多演示,如不清楚怎么创建自行百度😄

三、springboot配置文件及核心代码

  1. application.yml配置文件

    server:
      port: 30125
    ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
    spring:
      datasource:
       url: jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
       username: root
       password: 123456
       driver-class-name: com.mysql.jdbc.Driver
      ### 调度中心通讯TOKEN [选填]:非空时启用;
    xxl:
      job:
        ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
        admin:
          addresses: http://127.0.0.1:8080/xxl-job-admin
          ### xxl-job, access token
        accessToken:
        executor:
          ### xxl-job executor appname
          appname: xxl-job-demo
          ### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
          address:
          ### xxl-job executor server-info
          ip:
          port: 9909
          ### xxl-job executor log-path
          logpath: /data/applogs/xxl-job-demo/jobhandler
          ### xxl-job executor log-retention-days
          logretentiondays: 7
    
  2. xxl-job配置类核心代码

    package com.star;
    
    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;
    
    /**
     * @Author pengxin
     * @Date 2022/6/6 10:26
     * @Remarks
     */
    @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.setIp(ip);
            xxlJobSpringExecutor.setPort(port);
            xxlJobSpringExecutor.setAccessToken(accessToken);
            xxlJobSpringExecutor.setLogPath(logPath);
            xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
            return xxlJobSpringExecutor;
        }
    
    }
    
    
  3. 编写项目定时任务执行器

    package com.star.handler;
    
    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;
    
    /**
     * @Author pengxin
     * @Date 2022/6/6 11:00
     * @Remarks
     */
    @Component
    public class DemoXXLJobHandler {
    
        private Logger logger = LoggerFactory.getLogger(DemoXXLJobHandler.class);
    
        @XxlJob(value = "job")
        public ReturnT<String> execute(String param) throws Exception {
            logger.info("xxl-job hello world");
            System.out.println("定时任务已启动");
            return ReturnT.SUCCESS;
        }
    }
    
    
  4. 启动springboot项目

  5. 访问地址http://127.0.0.1:8080/xxl-job-admin(这个地址就是你配置文件里的xxl.job.admin.addresses>

    1. 初始账号密码:admin 123456
    2. 可以访问并登录就说明搭建完成了(如没有搭建完成请看下面我遇到的问题及解决方案)

四、xxl-job使用

  1. 首先在执行器管理中创建一个执行器

    1. AppName:对应你配置文件里面的xxl.job.admin.executor.appname,多个项目时名字不能重复

    2. 名称:自己随便取一个好听霸气的名字

    3. 注册方式:最好选择手动录入,手动录入就必须要填写机器地址

    4. 机器地址:http://ip+端口号/(端口号来源于xxl.job.admin.executor.port

  2. 然后在任务管理创建一个管理器需要注意的点:
    1. 运行模式:选择默认的即可
    2. JobHandler:这个跟你代码中的@XxlJob(value = "job")名字相同
    3. 任务参数:如果某些定时任务需要特定的参数,在任务参数中填写即可
    4. 其他的全部默认不需要动,必填的填写上就行了
    5. 创建完成之后点操作启动就行了

  1. 查看效果

四、遇见问题

遇到问题不可怕,可怕的是遇到问题没能解决这个问题,呜呜呜、太难受了🙁

问题一:项目启动报空指针NullPointerException

解决NullPointerException的方案

这个报空指针的问题是因为你少导入了一个依赖包,把springboot-web的依赖包导入就可以了

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>

问题二、拒绝连接问题

解决拒绝连接方案

这个拒绝连接的问题是你源码没有启动起来,或者是你的源码项目启动错了,把源码下载下来,启动xxl-job-admin

问题三、任务调度失败msg:xxl-job remoting error(no protocol: 127.0.0.1:9909/run)

解决方案

这个错误是因为你的执行器管理里面的机器地址写错了,里面必须要严格按照这个格式写http://ip+端口/

问题四、任务调度失败404msg:xxl-job remoting fail, StatusCode(404) invalid

解决方案

这个错误是因为你的执行器管理里面的ip地址或者端口地址写错了,端口地址来源是你的配置文件xxl.job.admin.executor.port,不是项目启动端口号server.port

posted @ 2022-06-07 08:58  star-xin  阅读(2341)  评论(0编辑  收藏  举报