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

news/2024/5/19 1:36:57 标签: 数据库, java, 服务器, XXL-JOB, 定时任务

文章目录

    • 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相关支持:

java">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;
    }
}

定义可执行的任务:

java">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.niftyadmin.cn/n/431515.html

相关文章

浅谈银桥乳业局域网设计与实现_kaic

摘 要 迈入二十一世纪&#xff0c;在互联网智能制造的加持下。各公司企业不断提升管理制造能力。云计算、新基建、大数据等技术日新月异。不断冲击着管理方式。企业局域网作为企业基建基础到越来越变得重要的。伴随着企业财务业务一体化的需求。ERP系统、CRM系统、HR系统、MES…

动态域名服务 DDNS,YYDS(四)

来源&#xff1a;公众号【鱼鹰谈单片机】 作者&#xff1a;鱼鹰Osprey ID &#xff1a;emOsprey 前面的笔记《如何像访问百度一样访问家里的服务器&#xff1f;&#xff08;三&#xff09;》已经通过公网 IP 桥接&#xff0c;完成了基本功能&#xff0c;已经可以通过公网 IP…

cpp新小点1

这里写目录标题 argc argv继承虚继承多态override不加override overload纯虚函数和抽象类虚析构和纯虚析构 static和 constexternself前置 后置默认构造 析构继承构造函数不能是虚函数派⽣类的override虚函数定义必须和⽗类完全⼀致。 有特列何时共享虚函数地址表 智能指针arrm…

【OpenMMLab AI实战营第二期】MMSegmentation简单使用及配置文件介绍

MMSegmentation介绍 代码仓地址&#xff1a;https://github.com/open-mmlab/mmsegmentation 文档库地址&#xff1a;[https://mmsegmentation.readthedocs.io/en/latest/overview.html](https://mmsegmentation.readthedocs.io/en/latest/overview.html] 安装MMSegmentation …

Nuxt.js:用 Vue.js 打造服务端渲染应用程序

文章目录 I. 简介Nuxt.js是什么Nuxt.js的历史和发展Nuxt.js的特点和优势1. 服务端渲染2. 自动生成路由3. 静态文件服务4. 异步数据加载5. 基于Webpack的构建系统6. 支持模块化的Vue组件7. 可定制的ESLint与StyleLint8. 支持PWA等高级功能 II. Nuxt.js基础Nuxt.js的安装和配置Nu…

ISO21434 威胁分析和风险评估方法(十二)

目录 一、概述 二、目标 三、资产识别 3.1 输入 3.1.1 先决条件 3.1.2 进一步支持信息 3.2 要求和建议 3.3 输出 四、威胁场景识别 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 五、影响等级 5.1 输入 5.1.1 先决条件 5.1.2 进一…

Java核心基础汇总

关键字&#xff1a;抽象类、接口、重载、重写 转载请注明&#xff1a;http://blog.csdn.net/feather_wch/article/details/52043153 最近重新整理以前的笔记资料&#xff0c;打造夯实基础。 Java核心基础汇总 版本&#xff1a;2023/6/14(6:52) Java中提供了抽象类和接口&…

AI 写作,30 秒上手,可别再说写作没思路了

你经常要与文字打交道吗&#xff0c;是不是也会有以下困惑&#xff1f; 写作难下笔写不好&#xff1f;课程制作难缺灵感&#xff1f;营销文案没吸引力&#xff1f;PPT制作耗时费力&#xff1f;短视频脚本没创意&#xff1f; ChatGPT 出现以后&#xff0c;嗅觉灵敏的先行者&…