xxl-job使用文档

47 阅读2分钟

xxl-job使用文档

官方文档

启动调度中心

  1. 拉取代码https://github.com/xuxueli/xxl-job.git,执行初始胡脚本doc/db/tables_xxl_job.sql

  2. 启动调度中心有两种

    • 一是通过源代码SpringBoot方式启动,修改数据库配置信息,运行XxlJobAdminApplication.java

    • 二是通过Docker启动(推荐)

      • 拉取镜像docker pull xuxueli/xxl-job-admin:2.3.0

      • 启动容器,-e PARAMS 后面为实际使用得MySQL

        docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai \
        --spring.datasource.username=root \
        --spring.datasource.password=123456" \
        -p 9527:8080 -v /tmp:/data/applogs \
        --name xxl-job-admin  \
        -d xuxueli/xxl-job-admin:2.3.0
        

启动执行器(可配置多个)

  1. 在需要添加定时任务得服务中增加xxl-job-core依赖,增加如下配置

    依赖

    <!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
    <dependency>
        <groupId>com.xuxueli</groupId>
        <artifactId>xxl-job-core</artifactId>
        <version>2.3.0</version>
    </dependency>
    

    配置信息

    # xxl-job配置
    xxl:
      job:
        accessToken: ''
        admin:
          addresses: http://localhost:8080/xxl-job-admin # 调度中心地址
        executor:
          address: ''
          appname: srbmp-job # 执行器名,注意如果不设置执行器名字,则会关闭自动注册
          ip: '' # 执行器IP地址,为空默认拿当前服务IP地址
          logpath: /data/applogs/xxl-job/jobhandler # 日志存放地址
          logretentiondays: 30 # 日志存放时间
          port: 9999 # 对调度中心暴露端口
    

    增加配置类

    package org.jeecg.modules.job.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;
        }
    
    }
    
  2. 添加定时任务

    这里暂时只写Java方式,有两种

    BEAN模式(类形式)

    // 1、继承JobHandler类
    // 2、手动通过如下方式注入到执行器容器
    XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
    

    BEAN模式(方法形式,推荐)

    官方案例

      // Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。
      // 每个任务只需要开发一个方法,并添加`@XxlJob`注解即可,更加方便、快速。支持自动扫描任务并注入到执行器容器。
      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++) {
                 XxlJobHelper.log("beat at:" + i);
                 TimeUnit.SECONDS.sleep(2);
             }
             // default success
         }
     }
    

项目中实际使用

  • JOB任务开发完成后,登录admin

  • 添加执行器(也就是job任务实际的载体),只要配置了xxl.job.executor.appname则会自动注册 image.png

  • 添加job任务,jobHandler一定要与你设置的job名字一致 image.png

  • job使用,执行一次就是字面意思立即执行一次,启动则是按照你添加任务的CRON时间执行 image.png