沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

  • 工具库篇

    • lombok工具库

    • EasyExcel小记

    • 定时任务相关

      • 基础入门
        • 可选择方案
        • cron 表达式
          • 格式
          • 字段含义
          • 特殊字符
          • 小结
        • 何为单机定时任务和分布式定时任务
          • 单机定时任务
          • 分布式定时任务
          • 区别
        • 多线程执行定时任务
        • 在线表达式生成器
        • 学习参考
      • SpringTask学习
      • Quartz学习
      • xxl-job学习
      • xxl-job高级参数配置篇
    • Hutool工具库

    • 极光推送学习
    • OkHttp学习
    • BigDecimal类详解
    • PdfBox学习
    • OCR功能实现
  • 开发技巧篇

  • 工具类系列

  • 随笔

  • 开发日常
  • 工具库篇
  • 定时任务相关
沉梦听雨
2024-07-11
目录

基础入门

# 定时任务基础入门

# 可选择方案

在 Spring 体系中,内置了两种定时任务的解决方案:

  1. 第一种,Spring Framework (opens new window) 的 Spring Task (opens new window) 模块,提供了轻量级的定时任务的实现。
  2. 第二种,Spring Boot (opens new window) 2.0 版本,整合了 Quartz (opens new window) 作业调度框架,提供了功能强大的定时任务的实现。
    • Spring Framework 已经内置了 Quartz 的整合。Spring Boot 1.X 版本未提供 Quartz 的自动化配置,而 2.X 版本提供了支持。

开源的调度任务中间件:

  1. Elastic-Job (opens new window)

    • 唯品会基于 Elastic-Job 之上,演化出了 Saturn (opens new window) 项目。
  2. Apache DolphinScheduler (opens new window)

  3. XXL-JOB (opens new window)

目前国内采用 Elastic-Job 和 XXL-JOB 为主。

使用 XXL-JOB 的团队可能会更多一些,主要是上手较为容易,运维功能更为完善。

# cron 表达式

# 格式

cron 表达式是一种用于配置定时任务(计划任务)的字符串,它由六个或七个字段组成,表示时间表,格式如下:

// 秒 分 时 日 月 星期 年 
* * * * * * ?
1
2

# 字段含义

每个字段由一个星号(*)或具体值组成,字段之间用空格分隔。以下是每个字段的含义:

  1. 秒(0 - 59):

    • 任务执行的秒数,可以是单个数字,范围列表,或特殊字符。
  2. 分(0 - 59):

    • 任务执行的分钟数。
  3. 小时(0 - 23):

    • 任务执行的小时数。
  4. 日期(1 - 31):

    • 任务执行的月份中的日期。
  5. 月份(1 - 12 或 JAN-DEC):

    • 任务执行的月份。
  6. 星期几(0 - 7 或 SUN-SAT):

    • 任务执行的星期几,0 或 7 表示星期日。
  7. 年份(可选字段):

    • 如果需要指定年份,可以在表达式的末尾添加年份字段。

# 特殊字符

特殊字符包括:

  1. 星号(*): 表示匹配任意值。例如,* 在分钟字段中表示每分钟都执行。
  2. 问号(?): 表示不指定值,通常用在日期和星期几字段,通常用于避免冲突。
  3. 连字符(-): 表示一个范围,例如 10-12 表示从 10 到 12。
  4. 斜线(/): 表示起始时间开始,每隔一定的间隔执行,例如 0/30 表示每 30 分钟。
  5. 逗号(,):用于分隔多个值。例如,1,3,5 在小时字段中表示 1 点、3 点和 5 点执行。
  6. L: 表示 “Last” 最后,例如在日期字段表示一个月的最后一天。只能出现在 【日期】和 【星期】域。
  7. W: 表示有效工作日(周一到周五),只能出现在【日期】域。
  8. LW: 这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
  9. #: 用于确定每个月第几个星期几,只能出现在【星期】域。例如在 4#2,表示某月的第二个星期三。

以下是一些具体的例子:

  • 0 * * * * ?: 每分钟执行一次。
  • 0 0/30 * * * ?: 每 30 分钟执行。
  • 0 0 * * * ?:整点执行。
  • 0 0-59/2 * * * ?: 每小时的第 2 分钟开始,每 2 分钟执行一次。
  • 0 8,14 * * * ?: 每天的上午 8 点和下午 2 点执行。
  • 0 0/5 14 * * ?: 在下午 2 点到 3 点之间,每 5 分钟执行一次。
  • 0 0 9-17 * * ?: 从上午 9 点到下午 5 点,每小时的整点执行。
  • 0 15 10 L \* ?:每月最后一日的上午 10:15 执行。
  • 0 15 10 ? * 6#3: 每月的第三个星期五上午 10:15 执行。

# 小结

字段 允许值 允许的特殊字符
秒(Seconds) 0~59 的整数 , - * / 四个字符
分(Minutes) 0~59 的整数 , - * / 四个字符
小时(Hours) 0~23 的整数 , - * / 四个字符
日期(DayOfMonth) 1~31 的整数(但是你需要考虑你月的天数) ,- * ? / L W C 八个字符
月份(Month) 1~12 的整数或者 JAN-DEC , - * / 四个字符
星期(DayOfWeek) 1~7 的整数或者 SUN-SAT (1=SUN) , - * ? / L C # 八个字符
年(可选,留空)(Year) 1970~2099 , - * / 四个字符

# 何为单机定时任务和分布式定时任务

单机定时任务和分布式定时任务是两种不同的任务调度方式,它们在计算机系统中用于自动执行预定的任务。下面是它们的基本定义和区别:

# 单机定时任务

  • 定义:单机定时任务是指在单个计算机或服务器上运行的定时任务。这种任务通常由操作系统的调度器或特定的任务调度软件来管理。
  • 特点:
    • 单一资源:单机定时任务只能在一个节点上运行,因此它只能利用该节点的资源。如果任务量超出了这个节点的处理能力,就可能导致性能瓶颈或任务延迟。
    • 串行处理:任务通常是串行执行的,这意味着它们一个接一个地运行,而不是同时进行。
    • 简单性:管理和配置相对简单,因为所有任务都在同一个系统上运行。
    • 局限性:如果任务量很大或需要高可用性,单机可能无法满足需求。
    • 容错性较低:如果单机发生故障,所有任务都可能受到影响,因为没有其他节点可以接管任务。

# 分布式定时任务

  • 定义:分布式定时任务是指在多个计算机或服务器上协调运行的定时任务。这种任务通常由分布式任务调度系统来管理,如 Apache Hadoop 的 Oozie、Apache Storm、Quartz 等。
  • 特点:
    • 扩展性:可以跨多个节点分布任务,提高系统的处理能力和容错性。
    • 高可用性:通过在不同的节点上运行任务,可以减少单点故障的风险。
    • 复杂性:管理和配置比单机定时任务更复杂,需要考虑任务的分配、节点间的通信和数据同步等问题。
    • 负载均衡:可以根据节点的负载情况动态分配任务,优化资源使用。
    • 容错性:如果某个节点发生故障,任务可以被重新分配到其他节点上执行,从而提高系统的稳定性和可靠性。

# 区别

  • 多节点资源:分布式定时任务可以在多个节点(服务器或计算机)上运行,这意味着它可以利用这些节点上的所有资源,包括CPU、内存、存储和网络带宽等。
  • 并行处理:任务可以在不同的节点上并行执行,从而提高处理速度和效率。
  • 容错能力:分布式系统通常具有更好的容错能力,因为任务可以在其他节点上重新调度。
  • 可扩展性:分布式系统更容易扩展,可以通过增加节点来处理更多的任务。
  • 管理难度:分布式定时任务的管理和配置通常比单机定时任务更复杂。

# 多线程执行定时任务

  • SpringBoot使用@Scheduled注解实现定时任务_springboot scheduled注解-CSDN博客 (opens new window)
  • spring boot @Scheduled未生效原因以及相关坑、及相对其他定时任务架构的优势 - zhjh256 - 博客园 (cnblogs.com) (opens new window)
  • 浅析SpringBoot中使用@scheduled定时执行任务需要注意的单线程的坑 - 古兰精 - 博客园 (cnblogs.com) (opens new window)
  • @Scheduled 的一些坑_scheduledcron失效-CSDN博客 (opens new window)

# 在线表达式生成器

  • Cron - 在线Cron表达式生成器 (ciding.cc) (opens new window)
  • 在线Cron表达式生成器 - 码工具 (matools.com) (opens new window)
  • 在线Cron表达式生成器 (qqe2.com) (opens new window)
  • quartz/Cron/Crontab表达式在线生成工具-BeJSON.com (opens new window)

# 学习参考

  • cron表达式详解 (opens new window)
上次更新: 2025/1/6 17:59:10
自定义日期格式化注解
SpringTask学习

← 自定义日期格式化注解 SpringTask学习→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式