定时任务--xxlj-ob


xxl-job

随着定时任务的数量和耗时增加,发现quartz对项目本身有较大的性能影响,虽然定时任务触发时间一般为晚上,但是对于有先后顺序和数据量大的处理极有可能影响用户体验,所以在寻找开源替代品中发现了xxl-job,它配置简单使用方便很适合中小型公司。
官网: https://gitee.com/shring/xxl-job/
xxl-job也需要自己的数据库表并,使用的是mysql

依赖



    com.xuxueli
    xxl-job-core
    1.6.1

在官方代码中需要注意三个文件即可

配置类XxxlJobConfig直接复制即可
SampleXxlJob:XxlJob开发示例(Bean模式)里面有很多实例方案,我本次使用的是分片方案

/**
     * 2、分片广播任务
     */
    @XxlJob("shardingJobHandler")
    public void shardingJobHandler() throws Exception {

        // 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

        // 业务逻辑
        for (int i = 0; i < 20; i++) {
            if (i % shardTotal == shardIndex) {
                XxlJobHelper.log("第 {} 片, 命中分片开始处理", i);
            } else {
                XxlJobHelper.log("第 {} 片, 忽略", i);
            }
        }

    }

@XxlJob("")注解是xxl-job的核心,只要配置这个就可以将这个方法交给它管理
自己使用只需要复制方法,给job命名,根据自己的分片策略调用业务逻辑即可

applicationl配置

xxl:
  job:
    admin:
#xxl-job的地址,如果有多个地址,用逗号分隔开
      addresses: http://127.0.0.1:8083/xxl-job-admin
    accessToken:
    executor:
# xxl-job执行器的名字
      appname: plan-exec
      address:
#执行器ip,选填,为空会自动获取ip
      ip:
#执行器端口号,选填,为空默认为9999
      port: 9993
#执行器日志保存天数,选填,值大于3时生效
      logretentiondays: 30
#执行器运行日志文件存储磁盘路径,选填,为空使用默认路径
      logpath: xxl-job