泪伤荡的编程指南 泪伤荡的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM篇
  • 新特性
  • 进阶篇
  • 网络
  • 操作系统
  • 数据结构与算法
  • 硬件
  • 基础篇
  • MySql
  • Oracle
  • PostgreSQL
  • 达梦
  • Redis
  • Mongodb
  • Hive
  • 数据库比较
  • Spring
  • SpringMvc
  • SpringBoot
  • Hibernate
  • iBatis
  • Mybatis
  • Mybatis-plus
  • Mybatis-plus-join
  • 各个框架对比
  • UML画图
  • 设计须知
  • 开发流程
  • 开发理论
  • 架构体系
  • 设计模式
  • 开源知识
  • 分布式解决方案
  • SpringCloud
  • API网关
  • 注册中心
  • 配置中心
  • 服务调用
  • 分布式事务
  • 消息队列
  • 调度作业
  • 链路追踪
  • 服务保障
  • 搜索引擎Elk
  • 安全框架
  • 监控体系
  • 部署容器
  • Netty
  • Tomcat
  • Nginx
  • 图片云存储
  • 云存储
  • 虚拟机Linux
  • 项目部署
  • 容器部署
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • Bug记录仓库
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 视频网站
  • 音乐网站
  • 商城网站
  • 论坛网站
  • scrm项目
  • Yudao-cloud
  • RuoYi-Vu-cloud
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • Java术语
  • 命名英语
  • 业务英语
  • 表字段英语
  • 包名英语
Github (opens new window)
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM篇
  • 新特性
  • 进阶篇
  • 网络
  • 操作系统
  • 数据结构与算法
  • 硬件
  • 基础篇
  • MySql
  • Oracle
  • PostgreSQL
  • 达梦
  • Redis
  • Mongodb
  • Hive
  • 数据库比较
  • Spring
  • SpringMvc
  • SpringBoot
  • Hibernate
  • iBatis
  • Mybatis
  • Mybatis-plus
  • Mybatis-plus-join
  • 各个框架对比
  • UML画图
  • 设计须知
  • 开发流程
  • 开发理论
  • 架构体系
  • 设计模式
  • 开源知识
  • 分布式解决方案
  • SpringCloud
  • API网关
  • 注册中心
  • 配置中心
  • 服务调用
  • 分布式事务
  • 消息队列
  • 调度作业
  • 链路追踪
  • 服务保障
  • 搜索引擎Elk
  • 安全框架
  • 监控体系
  • 部署容器
  • Netty
  • Tomcat
  • Nginx
  • 图片云存储
  • 云存储
  • 虚拟机Linux
  • 项目部署
  • 容器部署
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • Bug记录仓库
  • 随笔
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 视频网站
  • 音乐网站
  • 商城网站
  • 论坛网站
  • scrm项目
  • Yudao-cloud
  • RuoYi-Vu-cloud
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
  • Java术语
  • 命名英语
  • 业务英语
  • 表字段英语
  • 包名英语
Github (opens new window)
  • 开发工具篇

    • idea设置

      • 配置篇
      • 快捷键篇
      • debug篇
      • 插件篇
    • 玩转Git

      • 基础知识梳理
      • Git配置相关操作
      • git修改已提交人的用户名和邮箱
      • git提交规范
      • 常见问题
    • Maven相关

      • Maven简介
      • Maven常用命令
      • 依赖管理
      • Maven生命周期与插件
      • Maven项目管理工具
    • Apifox使用小结
    • nvm使用小结
    • JMeter使用小记
  • 工具库篇

    • lombok工具库

      • lombok注解使用小结
      • Builder用法解析
      • 异常相关注解
    • EasyExcel小记

      • 工具类
      • 文件导入
      • 文件导出
    • 定时任务相关

      • 基础入门
        • cron 表达式
          • 格式
          • 字段含义
          • 特殊字符
          • 小结
        • 何为单机定时任务和分布式定时任务
          • 单机定时任务
          • 分布式定时任务
          • 区别
        • 多线程执行定时任务
        • 在线表达式生成器
        • 学习参考
      • SpringTask学习
      • Quartz学习
    • Hutool工具库

      • 图片压缩
    • 极光推送学习
    • OkHttp学习
    • BigDecimal类详解
    • PdfBox学习
  • 开发技巧篇

    • 常见数据校验注解
    • 字符串拼接的5种方式
    • 遍历集合的N种方式
    • 集合使用注意事项总结
    • MP使用小记
    • Stream流技巧总结
    • 字符串处理最佳实践
    • SQL语句优化
    • 时间字段处理小记
    • Curl用法解析
    • 列表分页的两种实现方案
    • HashMap根据value获取key
    • Map的7种遍历方式
    • 唯一索引和逻辑删除冲突解决方法
    • 正则表达式
    • 二维码扫码登录学习
    • 脱敏最佳实践
    • 日志记录相关
  • 工具类系列

    • 手写一个文件阅读器
    • 手写一个运行耗时计算器
    • 自定义实现Java Bean属性中列表元素格式校验注解及其实现
    • 父子工程项目搭建
    • 自制代码生成器
  • 随笔

    • HttpServletRequest知识小结
    • Spring MVC 项目构建流程
    • 虚拟机固定ip地址
    • 项目部署
    • 深入理解数组
    • IIS使用小记
    • From的两种类型解析
    • 开发疑惑
    • 开发小记
    • bug解决
  • 开发日常
  • 工具库篇
  • 定时任务相关
泪伤荡
2024-07-11
目录

基础入门

# 定时任务基础入门

# 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)
上次更新: 2024/10/26 02:01:17
文件导出
SpringTask学习

← 文件导出 SpringTask学习→

Theme by Vdoing | Copyright © 2024-2025 泪伤荡 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式