定时任务概述

简介: 定时任务是基于时间表达式调度执行的任务,适用于对账、提醒、订单超时等场景。实现方案包括单体架构的轮询、Timer、ScheduledExecutorService、Quartz、SpringTask,以及分布式架构下的TBSchedule、Elastic-Job、XXL-JOB等,解决集群重复执行、动态调度、故障转移与监控问题。

什么是定时任务

通过时间表达式来进行调度和执行的一类任务被称为定时任务。一般能解决的业务场景:定时对账、服务到期的定时提醒、订单超时未支付的自动取消等。

有哪些定时任务实现方案

单体架构调度技术

  • 轮询+线程休眠

while(true) + Thread.sleep

  • java.util.Timer + java.util.TimerTask

Timer是一个定时器工具,用来在一个后台线程计划执行指定任务,它可以计划执行一个任务或反复多次

TimerTask是一个抽象类,它的子类代表一个可以被Timer计划执行的任务

  • ScheduledExecutorService

JDK1.5之后作为并发工具被引入,默认只支持周期性的执行频率(如每秒/每分钟),要支持具体某一刻年月日时分秒的执行窗口需要自定义扩展,较麻烦

  • Quartz

开源任务调度框架,Java语言编写实现,支持Spring整合使用

  • SpringTask

spring框架提供的轻量级定时任务调用工具

SpringBoot框架下可使用注解:@EnableScheduling+@Scheduled,底层还是SpringTask

分布式架构调度技术

分布式场景可能遇到的问题

  • 多台机器集群部署的定时任务如何保证不被重复执行
  • 如果在不重启服务前提下,动态调整定时任务执行时间
  • 部署定时任务的机器发生故障如何故障转移
  • 如何对定时任务做任务监控

业界解决方案

  • 淘宝:TBSchedule,现在是:ScheduleX
  • 当当:Elastic-Job
  • 唯品会:Saturn,基于当当的二次开发,新增一些特性
  • 大众点评:XXL-JOB
相关文章
|
2月前
|
人工智能 机器人 Java
黑马最新项目
AIGC项目涵盖大模型私有化部署、聊天机器人、RAG知识库及代码提示工具;天机AI集成SpringAI与多模型工作流;云岚到家聚焦微服务与分布式架构;四方保险构建统一支付与时序数据应用;星辰WMS与Dify项目即将发布。
109 0
黑马最新项目
|
2月前
|
canal 缓存 关系型数据库
微服务原理篇(Canal-Redis)
本文介绍了ES索引同步的常见方案,重点讲解Canal+MQ数据同步机制。通过解析MySQL的binlog日志,Canal模拟slave伪装接入主库,实现增量数据捕获,并结合RabbitMQ保证消息顺序性地同步至Elasticsearch。同时探讨了缓存一致性问题,提出使用分布式锁(如Redis)控制并发写操作,避免双写不一致。还涵盖Redis持久化、集群模式、过期淘汰策略及缓存三剑客(穿透、雪崩、击穿)的解决方案,系统梳理了高并发场景下的数据同步与缓存保障技术体系。
88 0
 微服务原理篇(Canal-Redis)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型专业名词解释手册
本手册由油炸小波设计提示词、Manus创作,系统梳理大语言模型核心概念,涵盖基础原理、训练技术、优化压缩、推理应用、评估调试及伦理安全六大模块,深入浅出解析LLM关键技术术语。
292 0
|
2月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍使用Arthas排查Java应用CPU占用过高问题的完整流程,涵盖线程分析、阻塞定位、watch命令追踪异常、jad反编译实现热更新及火焰图分析,实现无需重启应用的高效故障排查与代码修复。
91 0
|
2月前
|
缓存
QLExpress使用及源码分析
本文介绍基于QLExpress的规则引擎实现方案,涵盖实体构建、接口定义与脚本编写。通过@QLAlias注解映射字段别名,结合YAML配置规则表达式,实现逻辑解耦。运行时动态解析AST语法树,支持汉化变量与上下文绑定,并提供缓存与延迟执行机制,提升性能与灵活性。
57 0
QLExpress使用及源码分析
|
2月前
|
Java 应用服务中间件 Sentinel
服务保护、分布式事务
本课程讲解微服务保护核心知识,涵盖雪崩问题、熔断降级、限流隔离等方案,学习Sentinel实现熔断限流,掌握FallbackFactory降级处理及Seata分布式事务原理与应用。
36 0
服务保护、分布式事务
|
2月前
|
安全 Java 网络安全
HTTP工具
本文介绍了Java中通过HttpClient发送HTTP/HTTPS的GET和POST请求,并在请求头中添加AppKey和Secret的方法,包含设置超时参数、SSL安全连接及资源释放的完整实现,适用于安全通信场景。
80 0
|
2月前
|
Java
日期时间工具
本文提供Java日期处理工具类参考,涵盖常见日期操作:获取开始/结束时间、日期加减、周数计算、星期转换、时间格式化与解析、天数差计算等实用方法,适用于日常开发中的时间处理需求。
70 0
|
2月前
|
Java
随机ID
提供两个Java方法:`getStringRandom`生成指定长度的随机字母数字组合字符串,`getOnlyNumRandom`生成指定长度的纯随机数字字符串,适用于验证码、随机ID等场景。
42 0
|
2月前
|
存储 Java
StringUtil
Java中字符串最大长度受限于虚拟机规范,字符串字面量在class文件中存储时最大为65534,超长需分段处理。本文介绍通过StringBuilder分组拼接解决超长字符串接收问题的方法。
35 0