一文让你用上Xxl-Job 顺带了解cron表达式

news2024/11/24 12:44:50

文章目录

    • 1.定时任务框架-xxljob
      • 1.1 Xxljob介绍
        • 1)xxljob概述
        • 2)XXL-JOB特性
        • 3) 整体架构
        • 4)入门资料准备
      • 1.2 xxljob快速入门
        • 1)导入xxljob工程
        • 2)配置数据库
          • 1.初始化SQL脚本
          • 2.配置数据库环境
          • 3.业务处配置任务注册中心
        • 3)启动任务调度中心
        • 4)配置执行器工程
        • 5)配置并启动任务执行器
      • 2.3 cron表达式
        • 1)cron表达式作用
        • 2)取值范围
        • 3)特殊字段含义
        • 4)cron表达式阅读练习
    • 3.项目集成xxljob


在这里插入图片描述

1.定时任务框架-xxljob

1.1 Xxljob介绍

1)xxljob概述

官方地址:http://www.xuxueli.com/xxl-job
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易);

2)XXL-JOB特性

  • 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
  • 2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
  • 3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;

更多详情见官网

3) 整体架构

在这里插入图片描述

4)入门资料准备

资料链接:https://pan.baidu.com/s/1-s-UaQNNOG56yvFg8nHEHQ?pwd=snow

1.2 xxljob快速入门

1)导入xxljob工程

在这里插入图片描述

2)配置数据库

1.初始化SQL脚本

将xxljob提供的初始化SQL脚本导入数据库:

在这里插入图片描述

整体如下:

在这里插入图片描述

注意:

如果表 xxl_job_registry 导入过程报 Specified key was too long; max key length is 767 bytes 错误,则尝试将联合主键关联的 varchar 改小一些即可:

CREATE TABLE `xxl_job_registry` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `registry_group` varchar(50) NOT NULL,
  `registry_key` varchar(255) NOT NULL,
  `registry_value` varchar(255) NOT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
> 1071 - Specified key was too long; max key length is 767 bytes
> 时间: 0s
解决:将varchar修改为100即可;
使用的字符集为(utf8mb4),这个指每个字符最大的字节数为4,所以很明显 4*255 > 767

2.配置数据库环境

在这里插入图片描述

3.业务处配置任务注册中心

在这里插入图片描述

认证注册中心端口保证与admin端口一致即可;


3)启动任务调度中心

运行xxl-job-admin工程main方法启动:

在这里插入图片描述

访问管理界面:http://localhost:8082/xxl-job-admin/

登录用户名:admin 密码:123456

在这里插入图片描述

当前我们重点关注:执行器管理和任务管理;


4)配置执行器工程

在 业务 工程修改端口号和任务注册中心端口号:

# XXJOB参数配置
xxl:
  job:
    accessToken:
    admin:
      addresses: http://127.0.0.1:8082/xxl-job-admin
    executor:
      appname: snow-stock-job-executor
      address:
      ip:
      # 当前任务执行器启动时,会独立一个端口6666用于与任务管理中心交互,改端口也可改动
      port: 6666
      logpath: /joblog
      logretentiondays: 30

在这里插入图片描述


该工程默认导入了xxl-core核心包:

<!--引入xxljob核心依赖-->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

默认已经配置好xxl-job相关支持:

package com.xxl.job.executor.core.config;
@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;
    }
}

定义可执行的任务:

package com.xxl.job.executor.service.jobhandler;
@Component
@Slf4j
public class SampleXxlJob {
    
    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
       //todo 打印时间
       System.out.println("hello xxljob.....");
    }

	//.....省略......

    /**
     * 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑;
     */
    @XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")
    public void demoJobHandler2() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
    }
    public void init(){
        log.info("init");
    }
    public void destroy(){
        log.info("destory");
    }
}

@XxlJob中的value值就是定时任务的一个标识,注解作用的方法,就是定时任务的逻辑,在该类下,我们可以注入自定义的job服务,然后通过注解作用的方法被调用执行;

将业务模块启动起来:

在这里插入图片描述


5)配置并启动任务执行器

在这里插入图片描述

在这里插入图片描述

接下来,我们将 业务 工程下的 自定义 任务,可视化配置,并启动:

输入job_test,输入的名称保证与@xxljob注解下的value值一致即可

在这里插入图片描述


启动任务查看执行效果:
在这里插入图片描述

在这里插入图片描述

当然,我们也可以随时停止正在被执行的任务:
在这里插入图片描述


2.3 cron表达式

1)cron表达式作用

xxl-job 中 的cron 表达式是用来控制触发任务使用的,表达式包含7个部分分别从秒、分、时、日、月、星期、年七个时间维度来确定任务何时每多长时间执行一次。

2)取值范围

cron表达式格式:
*    *    *    *    *    *    *
-    -    -    -    -    -    -
|    |    |    |    |    |    |
|    |    |    |    |    |    + year [optional]
|    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)1-1 
|    |    |    |    +---------- month (1 - 12)
|    |    |    +--------------- day of month (1 - 31)
|    |    +-------------------- hour (0 - 23)
|    +------------------------- min (0 - 59)
+------------------------------ second (0 - 59)
字段允许值允许的特殊字符
0-59, - * /
0-59, - * /
小时0-23, - * /
月内日期1-31, - * ? / L W C
1-12 或者 JAN-DEC, - * /
周内日期1-7 或者 SUN-SAT(注意:周日是1,周一为2,周六位7), - * ? / L C #
年(可选)留空, 1970-2099, - * /

3)特殊字段含义

特殊字符意义
*匹配所有的值。如:*在分钟的字段域里表示 每分钟
?只在日期域和星期域中使用。它被用来指定“非明确的值” 不关心
-指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”
,指定几个可选值。如:“MON,WED,FRI”在星期域里表示“星期一、星期三、星期五”
/指定增量。如:“0/15”在秒域意思是每分钟的0,15,30和45秒。“5/15”在分钟域表示每小时的5,20,35和50。符号“”在“/”前面(如:/10)等价于0在“/”前面(如:0/10)
L表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五
W只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的
LWL和W可以在日期域中联合使用,LW表示这个月最后一周的工作日
#只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三

4)cron表达式阅读练习

(1)0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务

(2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业

(3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作

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

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

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

(7)0 15 10 * * ? 每天上午10:15触发

(8)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发

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

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

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

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

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

3.项目集成xxljob

同 1.24



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【色度学】光学基础

1. 光的本质 &#xff08;1&#xff09;波长不同的可见光&#xff0c;引起人眼的颜色感觉不同。 &#xff08;2&#xff09;人们观察到的颜色是物体和特有色光相结合的结果&#xff0c;而不是物体产生颜色的结果。 2. 光度量 【ISP】光的能量与颜色&#xff08;1&#xff0…

【学术探讨】万能密码原理剖析

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 【万能密码】&#xff0c;顾名思义&#xff0c;就是…

ArcGIS提取水系并进行生态敏感性分析

1、前言 &#xff0c;这篇是用ArcGIS进行水系提取&#xff0c;与前者的区别是上篇一般是对遥感影像进行处理&#xff0c;准确性较高&#xff1b;这篇是讲在没有遥感影像的情况下&#xff0c;用DEM进行水系的提取&#xff0c;一般与实际水系有差别&#xff0c;准确性较低。但是…

rm 命令的使用以及指定不删除某些文件

目录 1、删除单个文件 2、强制删除文件&#xff0c;无需确认 3、删除文件夹 4、删除目录下全部文件&#xff0c;包括文件夹 5、删除全部文件&#xff0c;但保留readme.txt 6、删除全部文件&#xff0c;保留1.txt和2.txt 7、使用find grep xargs命令来删除 8、删除全部…

把手伸向大数据平台的云原生,是如何将大数据平台迁移至K8s上的?

我们正身处数据大爆炸的时代&#xff0c;据IDC数据显示&#xff0c;仅在2022年&#xff0c;人类就将创造超过97ZB的数据&#xff1b;要知道截至2012年&#xff0c;人类生产的所有印刷材料的数据量为200PB&#xff0c;仅为2022年一年所创造数据量的50万分之一。据预测&#xff0…

目标检测数据集---工业铝片表面缺陷数据集

✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的数据集会在该…

Echarts—根据地理坐标被标注的中国地图(标记可以自定义为图片)

中国地图 实现效果图创建echartChina.vue组件使用echartChina.vue组件修改标记图标为图片 实现效果图 这是一个有阴影的,并且根据坐标点被标记的地图展示&#xff0c;下面我们就把实现的代码贴出来&#xff0c;老样子&#xff0c;还是开袋即食&#xff01; 创建echartChina.vu…

matlab求解方程和多元函数方程组

核心函数solve 一般形式 Ssolve(eqns,vars,Name,Value) &#xff0c;其中&#xff1a; eqns是需要求解的方程组&#xff1b; vars是需要求解的变量&#xff1b; Name-Value对用于指定求解的属性&#xff08;一般用不到&#xff09;&#xff1b; S是结果&#xff0c;对应于v…

【MySQL高级篇笔记-主从复制(下) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、主从复制概述 1、如何提升数据库并发能力 2、主从复制的作用 二、主从复制的原理 1、原理剖析 2、复制的基本原则 三、一主一从架构搭建 1、准备工作 2、主机配置文件 3、从机配置文件 4、主机&#xff1a;建立账户并…

如何通过CRM系统进行群发邮件?

CRM客户管理软件不仅可以记录客户的信息&#xff0c;还可以集成电子邮箱&#xff0c;实现在CRM中即可管理客户邮件的功能。那么&#xff0c;CRM系统可以群发邮件吗&#xff1f;当然可以&#xff01;使用Zoho CRM即可轻松实现邮件群发。 1、通过Zoho CRM群发邮件的好处 1&…

对话钉钉音视频专家冯津伟:大模型不是万能的

策划&#xff1a;LiveVideoStack 在音视频技术领域&#xff0c;ICASSP 大会是行业的风向标会议&#xff0c;也是语音学界从业者研究下一代技术发展的盛宴。近期&#xff0c;国内外各大企业陆陆续续放出论文入顶会的消息&#xff0c;钉钉蜂鸣鸟音频实验室 2 篇论文也登上了 ICAS…

「2024」预备研究生mem-从不同备选池选元素从相同备选池选元素-仅分推

一、从不同备选池选元素 至少错误的解体&#xff1a; 其他方法&#xff1a; 二、从相同备选池选元素-仅分推 三、练习题 至少问题

【工具篇】Maven加密Nexus用户密码

背景说明 按照DevOps三级要求&#xff0c;Maven工具发布Nexus帐号不能使用明文密码&#xff0c;需要对settings.xml文件中的password密码进行加密存储。下面就说一下具体的加密过程及配置方法。 环境说明 Maven&#xff1a;Apache Maven 3.6.3 Nexus&#xff1a;OSS 3.29.2-…

设计用户模块的schema

schema 在计算机科学中&#xff0c;schema通常指的是 数据结构的定义和约束。 关系型数据库 在关系型数据库中&#xff0c;schema指的是数据库中所有表格的定义和表格之间的关系约束&#xff0c;包括每个表格的列名、数据类型、主键、外键等等。 如果要对一个关系型数据库进行…

在没有实验数据的情况下,如何高效快速发表论文

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

互联网一线大厂Java面试题大全带答案 1110道(持续更新)

前言 春招&#xff0c;秋招&#xff0c;社招&#xff0c;我们 Java 程序员的面试之路&#xff0c;是挺难的&#xff0c;过了 HR&#xff0c;还得被技术面&#xff0c;小刀在去各个厂面试的时候&#xff0c;经常是通宵睡不着觉&#xff0c;头发都脱了一大把&#xff0c;还好最终…

平台稳定性里程碑 | Android 14 Beta 3 发布

作者 / Dave Burke, VP of Engineering 随着今天 Android 14 Beta 3 的发布&#xff0c;我们随之进入到 Android 开发周期的下一个阶段。Beta 3 依旧围绕着我们的核心主题打造&#xff0c;即隐私、安全、性能、开发者生产力和用户定制&#xff0c;同时继续完善平板电脑、可折叠…

基础知识学习---排序算法

1、本栏用来记录社招找工作过程中的内容&#xff0c;包括基础知识学习以及面试问题的记录等&#xff0c;以便于后续个人回顾学习&#xff1b; 暂时只有2023年3月份&#xff0c;第一次社招找工作的过程&#xff1b; 2、个人经历&#xff1a; 研究生期间课题是SLAM在无人机上的应…

Rsync工具的详细介绍以及定时备份案例

RSYNC 什么是RSYNC rsync是类unix下的一款数据镜像备份工具——remote sync。 Rsync 的基本特点如下&#xff1a; 可以镜像保存整个目录树和文件系统&#xff1b;可以很容易做到保持原来文件的权限、时间、软硬链接等&#xff1b;无须特殊权限即可安装&#xff1b;优化的流…

Java中的Lambda表达式详解

文章目录 什么是LambdaLambda表达式的语法Lambda表达式的应用场景GUI应用Lambda表达式的优缺点总结 什么是Lambda java中的Lambda表达式是一种函数式编程的风格&#xff0c;它允许我们将代码作为数据传递&#xff0c;并在需要时执行。Lambda表达式能够极大地简化代码&#xff0…