首页 > 其他分享 >XXL-JOB及Cron表达式

XXL-JOB及Cron表达式

时间:2024-11-25 11:33:13浏览次数:6  
标签:执行器 job 调度 Cron JOB 任务 executor XXL xxl

目录

一、XXL-JOB简述

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

部分特性:
1、调度采用中心式设计,任务分布式执行;调度中心和任务执行器都支持集群部署
2、执行器会自动注册任务, 调度中心将会自动触发任务执行;
3、一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
4、提供多种触发策略:Cron触发、固定间隔触发、固定延时触发、API(事件)触发、人工触发;
5、调度过于频繁,任务来不及处理时,可采用的策略有:
单机串行(默认):调度请求进入单机执行器后,请求进入FIFO队列并以串行方式运行;
丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务
6、支持自定义任务超时时间,任务运行超时将会主动中断任务;
7、可以自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;
8、任务失败告警:默认提供邮件方式失败告警;配置多个邮箱地址时用逗号分隔
9、支持多种脚本任务,包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本;
10、采用集群部署时,有多种丰富路由策略
故障转移:如果执行器集群中某一台机器故障,将会自动切换到正常的执行器发送调度请求
第一个:固定选择第一个机器;
最后一个:固定选择最后一个机器;
轮询:依次选取执行器管理的注册地址列表中的执行器;
随机:在执行器管理的注册地址列表中随机选取一个在线的机器;
一致性HASH:每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上;
最不经常使用:使用频率最低的机器优先被选举;
最近最久未使用:最久未使用的机器优先被选举;
忙碌转移:按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
分片广播:广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;

二、搭建xxl-Job

环境
Maven3+
Jdk1.8+
Mysql8.0+

2.1 执行初始化sql脚本

将源码下载并解压后,找到/xxl-job/doc/db/tables_xxl_job.sql文件到数据库中执行
其中:
xxl_job_group:执行器信息表,维护任务执行器信息;
xxl_job_info:调度扩展信息表, 用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
xxl_job_lock:任务调度锁表;
xxl_job_log:调度日志表: 用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
xxl_job_log_report:调度日志报表:用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
xxl_job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
GLUE是一种任务调度模式,允许用户直接在调度中心编写和执行任务代码,而无需将代码部署到执行器。
xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
xxl_job_user:系统用户表;

2.2 引入依赖

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.4.1</version>
</dependency>

2.3 xxl-job配置

源码的调度中心配置文件位置
/xxl-job/xxl-job-admin/src/main/resources/application.properties;

项目中配置中心的配置:
application.yml:

server:
  #配置中心端口;与执行器中配置保持一致
  port: 8080
  servlet:  
    context-path: /xxl-job-admin  
  
management:  
  server:  
    servlet:  
      context-path: /actuator  
  health:  
    mail:  
      enabled: false  

#mybatis
mybatis:
	mapper-locations: classpath:/mybatis-mapper/*Mapper.xml
  
spring:
  #配置数据源信息
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/xxl_job
    username: root  
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    #多数据源 
    type: com.zaxxer.hikari.HikariDataSource  
    hikari:  
      pool-name: 连接池的名
      minimum-idle: 10  
      maximum-pool-size: 20  
      auto-commit: true  
      idle-timeout: 30000  
      max-lifetime: 900000  
      connection-timeout: 10000  
      connection-test-query: SELECT 1  
      validation-timeout: 1000  
  # 报警邮箱 
  mail:  
    host: smtp.qq.com  
    port: 25  
    username: xxx@qq.com  
    from: xxx@qq.com  
    password: xxx  
    properties:  
      mail:  
        smtp:  
          auth: true  
          starttls:  
            enable: true  
            required: true  
          socketFactory:  
            class: javax.net.ssl.SSLSocketFactory
  
xxl:  
  job:
  	#执行器通讯TOKEN [选填]:非空时启用;
    accessToken: default_token
    #调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体
    i18n: zh_CN
    # 调度线程池最大线程配置【必填】
    triggerpool:  
      fast:  
        max: 200  
      slow:  
        max: 100
    # 调度中心日志表数据保存天数 [必填]
    logretentiondays: 30

执行器的配置:
源代码位置:/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

项目中配置:
xxl-job.yml

xxl:  
  job:  
    admin:  
      #调度中心部署根地址 [选填],执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"
      addresses: http://127.0.0.1:8080/xxl-job-admin
    #执行器通讯TOKEN [选填]
    accessToken: default_token  
    executor:  
      appname: testJob 
      #执行器IP [选填]:默认为空表示自动获取IP  
      address: 
      ip:
      #执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 9999
      #执行器运行日志文件存储磁盘路径
      logpath: /data/applogs/xxl-job/jobhandler
      # 执行器日志文件保存天数 [选填] 
      logretentiondays: 30

2.4 执行器组件

源代码位置:/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java

项目中使用:

@Configuration
@Slf4j
public class XxlJobConfig {
    @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() {
        log.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.5 开发任务

BEAN模式(方法形式):每个任务只需要开发一个方法,并添加”@XxlJob”注解即可

@XxlJob("jobHandler")
public void jobHandler() throws Exception {
    XxlJobHelper.log("执行成功");
}

2.6 访问调度中心

地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)
默认登录账号 “admin/123456”

想要修改登陆密码时:
用默认密码(amdin/123456)登陆web页面,然后右上角点击修改密码
或者直接数据库中修改密码(采用MD5算法32位小写加密)

三、Cron表达式

是一个用于定义计划任务执行时间的字符串
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
秒:0-59之间的整数,可选
‌分:0-59之间的整数,可以使用“”表示每分钟,“-”表示范围,“/”表示步长
‌时:0-23之间的整数
‌日:1-31之间的整数,可以使用“
”表示每月的每一天,“L”表示月的最后一天,“?”表示不指定日期
‌月:1-12之间的整数或JAN-DEC
‌周:1-7之间的整数或SUN-SAT,1表示星期天,2表示星期一。可以使用“?”表示不指定星期几,使用“L”表示月的最后一个工作日

示例:

  • 表示所有值,可解读为 “每”
    0 0 1 * * ? 每天凌晨1点执行
    0 3 0 1 * ? 每个月的1号凌晨3点执行

/ 在某个域上周期性触发
0 */1 * * * ? 每隔1分钟执行一次
0 0/3 14 * * ? 在每天下午2点到下午2:55期间的每3分钟触发一次

  • 表示时间段
    0 0-3 14 * * ? 在每天下午2点到下午2:03期间的每1分钟触发一次

, 指的是在两个以上的时间点中都执行
0 0/3 14,15 * * ? 在每天下午2点到下午2:55期间以及3点到3点55期间每3分钟触发一次

L 表示英文中的LAST 的意思,只能在 “日”和“周”中使用
0 0 20 L * ? 每月最后一天20点执行一次

W 表示离指定日期的最近那个工作日(周一至周五)触发
0 10 10 LW * ? 每个月最后一个工作日的10点10触发任务

#表示每月的第几个周几,只能作用于 “周” 上
0 10 10 ? * 5#3 每个月第三周的星期四的10点10分触发任务

注意:
日期冲突‌:
日期和星期字段通常不会同时指定,因为它们可能会产生冲突。
如果同时指定了这两个字段,Cron表达式会优先匹配日期字段

标签:执行器,job,调度,Cron,JOB,任务,executor,XXL,xxl
From: https://blog.csdn.net/qq_56650001/article/details/143936675

相关文章

  • oracle数据库---PL/SQL、存储函数、存储过程、触发器、定时器job、备份
    PL/SQL什么是PL/SQLPL/SQL(Procedure Language/SQL)是Oracle对sql语言的过程化扩展,指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单......
  • PowerShell 实现删除指定路径X天前文件功能并添加定时JOB实例
    公司的POA服务器的E盘隔三差五就爆满,原因是数据库备份文件越来越大,现在已经大到需要高频清理的地步了十一前出现的这个问题,当时为了不专门在假期里某天特地去清理磁盘,想着一定要搞个定时JOB实现自动清理最后选用了PowerShell脚本实现新建一个txt文件,打开编辑内容如下:#设置要......
  • XXJ-JOB任务调度-快速入门-集成项目-动态创建任务
    XXJ-JOB任务调度官方文档:https://www.xuxueli.com/xxl-job/概述XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。文档地址中文文档一、快速入门依赖<dependency><group......
  • 题解:SP1703 ACMAKER - ACM (ACronymMaker)
    题目大意:一个有一些单词组成的短语,给定一个缩写词,求此缩写由此短语的单词组成的可能方案数。注意,短语中所有重要的单词都要用到,顺序必须和缩写词单词顺序一致。思路动态规划设置:\(dp_{i,j}\):使用前\(i\)个重要单词形成前\(j\)个缩写字符的方法数。\(dp2_{k,m}\):辅助数组......
  • linux 如何创建定时任务?crontab -e 定时任务使用的时间是系统时间
    crontab-e创建的定时任务使用的是系统时间。什么是系统时间?系统时间是操作系统内部维护的一个时间戳,用于记录系统启动以来经过的时间,以及当前的日期和时间。系统时间通常与硬件时钟同步,以确保时间的准确性。crontab如何使用系统时间?crontab在执行定时任务时,会根据系统......
  • 如何在 Python 中获得类似 Cron 的调度程序?
    我正在寻找一个Python库,它将提供at和cron类似的功能。我很想有一个纯Python解决方案,而不是依赖于安装在盒子上的工具;这样我就可以在没有cron的机器上运行。对于那些不熟悉cron的人:您可以根据如下表达式来安排任务:02**7/usr/bin/run......
  • cloud run job yaml file
    在GoogleCloudRun中,CloudRunJobs允许你运行一次性任务。下面是一个简单的CloudRunJob的YAML文件示例,它可以帮助你定义一个Job。这个文件将定义一个Job运行时的镜像、任务个数和执行参数等。CloudRunJobYAML示例yaml复制代码apiVersion:run.googleapis.co......
  • Web Development Job in 4
    简介网络开发领域持续快速发展,为拥有适当技能和知识的个人提供了令人兴奋的机会。如果您想进入这个充满活力的行业或提升自己的职业生涯,这里有一些重要策略可以帮助您在2024年找到梦想的工作:1.掌握基本技能编程语言:熟练掌握JavaScript、Python、Ruby或PHP等语言至关......
  • Java SpringBoot 结合 Vue 根据时间生成Cron表达式
    在SpringBoot与Vue结合的项目中,根据用户输入的时间生成Cron表达式是一个常见的需求,尤其是在需要定时任务的应用场景中。1.前端(Vue部分)首先,在前端使用Vue.js创建一个表单,让用户可以输入具体的日期、时间等信息。可以使用日期选择器组件来简化用户的输入过程,比如element-ui或vuetif......
  • flink 启动Job加载外部jar都有哪些方法?
    flink启动Job加载外部jar都有哪些方法在ApacheFlink版本中,启动Job时加载外部Jar包有几种不同的方法。这些方法允许用户引入自定义的UDF(用户定义函数)或其他依赖项。以下是几种常见的方法:1.使用flinkrun命令直接启动你可以通过命令行工具flinkrun来指定你的Job......