分布式任务调度平台 xxl-job 集成

作者: 阿琦 | 2021-05-29 | 阅读

说明

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

GitHub:https://github.com/xuxueli/xxl-job

文档:https://www.xuxueli.com/xxl-job/

mysql数据库表 sql 在 doc/db 目录下面

<!-- 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>


package com.eth.filecoin.config;

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

/**
 * @author: aqi
 * @Date: 2021/5/27 10:33
 * @Description:
 */
@Configuration
@Slf4j
public class XxlJobConfig {

    @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(initMethod = "start", destroyMethod = "destroy")
    @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;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "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();
     */
}
xxl:
  job:
  #执行器通讯TOKEN:非空时启用
  # 初始化报错就加上了,不报错不管
    accessToken: admin
    admin:
    # 这个地址要连的上 xxl-job 里面的 xxl-job-admin
      addresses: http://127.0.0.1:8086/xxl-job-admin
    executor:
    # 这个 name 新增执行器名称必须要一样
      appname: xxl-job-executor
      logpath: job-logs
      #执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效
      #-1表示永不删除
      logretentiondays: 5
      ip:
      port: 9999
package com.eth.filecoin.job;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;

/**
 * @author: aqi
 * @Date: 2021/5/27 10:36
 * @Description:
 */
@Component
public class DemoJobHandler extends IJobHandler {
    @Override
    @XxlJob("demoJobHandler2222")
    public void execute() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
    }
}

另一种写法:

另一种写法

执行器名称,要和配置文件配的一样,不然会报错。

执行器新增

新增任务 1

新增任务 2

执行结果

要注意的地方

GitHub 或者 码云 xxl-job 下面有 xxl-job-admin 子工程,这个要先启动,再启动 xxl-job-executor-samples里面的示例。

可能报错地方之一

java.net.BindException: Address already in use: bind

解决办法:

可能报错地方之二

检查配置文件,不管是用xxl-job 下面的示例,还是通过 maven 包的定时job,都是连的 xxl-job-admin 这个,检查配置文件什么端口号、地址啊,这些。


版权声明:本文由 阿琦 在 2021年05月29日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《分布式任务调度平台 xxl-job 集成》




  相关文章:


留言区:

TOP