首页 > 其他分享 >xxl-job配置及使用

xxl-job配置及使用

时间:2022-10-31 21:57:22浏览次数:75  
标签:10 30 15 触发 配置 job xxl

源码

源码仓库地址 Release Download
https://github.com/xuxueli/xxl-job Download
xxl-job-gitee: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 Download

数据库

调度数据库初始化SQL脚本位置为: /xxl-job/doc/db/tables_xxl_job.sql

调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例;
如果mysql做主从,调度中心集群节点务必强制走主库;

源码结构

xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用;
xxl-job-executor-sample-frameless:无框架版本;

依赖

        <!--需要添加 spring-boot-starter-web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.3.1</version>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

配置

配置文件

# xxl-job
xxl:
  job:
    admin:
      addresses: http://127.0.0.1:8081/xxl-job-admin
    executor:
      appname: xxl-job
      ip:
      port: 9999
      logpath: ./logs/xxl-job/jobhandler
      logretentiondays: -1
    accessToken: default_token
  • addresses:xxl-job的地址,如果有多个地址,用逗号分隔开。项目(xxl-job-admin)调度中心地址
  • appname: xxl-job执行器的名字
  • ip:执行器ip,选填,为空会自动获取ip
  • port:执行器端口号,选填,为空默认为9999
  • logpath:执行器运行日志文件存储磁盘路径,选填,为空使用默认路径
  • logretentiondays: 执行器日志保存天数,选填,值大于3时生效
  • accessToken:default_token (xxl-job-admin)调度中心默认token
    配置类
package com.its.myJob.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.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.its.myJob.executor")
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @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") 2.2.0版本后需要移除(initMethod = “start”, destroyMethod = “destroy”)
    @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);
        // 手动添加
        // XxlJobExecutor.registJobHandler("testJobHandler1", new TestJobHandler());        

        return xxlJobSpringExecutor;
    }
}

注:com.its.myJob.executor 为需要执行功能的文件夹

执行功能

BEAN模式

  • 优点:每个任务只需要开发一个方法,并添加”@XxlJob”注解即可,更加方便、快速。
    支持自动扫描任务并注入到执行器容器。
  • 缺点:要求Spring容器环境;

第一种:方法形式

1、任务开发:在Spring Bean实例中,开发Job方法;
2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;
4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;

package com.its.myJob.executor;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class TestJobHandler {
    @XxlJob("test")
    public void test(){
        System.out.println("成功");
    }
}

第二种:类形式

创建TestJobHandler1,然后手动注册执行器XxlJobExecutor.registJobHandler("testJobHandler1", new TestJobHandler());

package com.its.myJob.executor;

import com.xxl.job.core.handler.IJobHandler;
import org.springframework.stereotype.Component;

@Component
public class TestJobHandler1 extends IJobHandler {

    @Override
    public void execute() throws Exception {
        System.out.println("成功");
    }
}

GLUE模式(Java)

  • 任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler。

步骤一:调度中心,新建调度任务:

对新建的任务进行参数配置,运行模式选中 “GLUE模式(Java)”

步骤二:开发任务代码:

选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发(也可以在IDE中开发完成后,复制粘贴到编辑中)。

版本回溯功能(支持30个版本的版本回溯):在GLUE任务的Web IDE界面,选择右上角下拉框“版本回溯”,会列出该GLUE的更新历史,选择相应版本即可显示该版本代码,保存后GLUE代码即回退到对应的历史版本;

调度中心管理

  • 调度中心项目:xxl-job-admin
  • 作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
  • 登录账户: admin/123456

点击新增执行器后

任务管理

点击新增任务后

启动项目

查看日志

执行成功

cron表达式

xxl-job的表达式由7个部分组成,例如:
注:/与5算是一个整体

秒数 分钟 小时 日期 月份 星期 年份(可为空)
*/5 * * * * ?

各个位置的取值范围

秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * / 可以用0-11 或用字符串 “JAN, FEB, MAR, APR, MAY,
JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示
星期 1-7 或者 SUN-SAT , - * ? / L C # 可以用数字1-7表示(1 = 星期日)或用字符口串“SUN, MON,
TUE, WED, THU, FRI and SAT”表示
年(可选) 留空, 1970-2099 , - * /

上述取值范围中的符号详解

* 表示所有值;
? 表示未说明的值,即不关心它为何值;
- 表示一个指定的范围;
, 表示附加一个可能值;
/ 符号前表示开始时间,符号后表示每次递增的值;

下面是一些表达式的案例和cron表达式生成器地址

*/5 * * * * ? 每隔5秒执行一次

0 */1 * * * ? 每隔1分钟执行一次

0 0 5-15 * * ? 每天5-15点整点触发

0 0/3 * * * ? 每三分钟触发一次

0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发

0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发

0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时

0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

0 0 12 ? * WED 表示每个星期三中午12点

0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点

0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发

0 15 10 ? * MON-FRI 周一至周五的上午10:15触发

0 0 23 L * ? 每月最后一天23点执行一次

0 15 10 L * ? 每月最后一日的上午10:15触发

0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发

0 15 10 * * ? 2005 2005年的每天上午10:15触发

0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发

0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发

"30 * * * * ?" 每半分钟触发任务

"30 10 * * * ?" 每小时的10分30秒触发任务

"30 10 1 * * ?" 每天1点10分30秒触发任务

"30 10 1 20 * ?" 每月20号1点10分30秒触发任务

"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务

"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务

"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务

"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务

"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务

"15-45 * * * * ?" 15到45秒内,每秒都触发任务

"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次

"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次

"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次

"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务

"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务

"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务

"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务

"0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务

参考链接:
https://blog.csdn.net/he_xin2009/article/details/124220797
https://blog.csdn.net/aaaPostcard/article/details/110501923

标签:10,30,15,触发,配置,job,xxl
From: https://www.cnblogs.com/2393920029-qq/p/16845674.html

相关文章