定时任务概述

简介: 定时任务是通过时间表达式调度执行的任务,适用于对账、提醒、订单超时等场景。实现方式包括单体架构的轮询、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
相关文章
|
运维 大数据 Shell
自动化运维工具—Ansible-1
自动化运维工具—Ansible
384 0
|
2月前
|
SQL 机器学习/深度学习 自然语言处理
为什么企业做智能问数,不能只靠宽表、预制指标和 SQL
本文剖析企业智能问数落地难的根源:非性能或模型之限,而在业务语义缺失——对象定义不清、关系模糊、口径不一。指出SQL、宽表、预制指标各有所长却难解复杂动态问题;提出“本体论+ABC方法”(Acquire对象→Build指标→Compute计算),以显式建模业务语义,提升可理解性、可维护性与长期演进能力。
|
4月前
|
Java Maven
【2026最新】Maven配置阿里云镜像
本文介绍在Maven 3.9与JDK 21环境下,如何配置阿里云镜像加速依赖下载。通过修改Maven的conf/settings.xml文件,在<mirrors>标签中添加阿里云公共仓库镜像配置,提升构建效率。
3345 1
|
5月前
|
安全 Java Maven
工程搭建
通过阿里云脚手架快速搭建Maven/Gradle工程,支持Spring Boot 2.7.6版本,导入IDEA后添加web依赖,编写接口并启动验证。后续可整合Spring Security实现安全控制,便于快速开发与部署应用。(239字)
工程搭建
|
5月前
|
人工智能 算法 机器人
AI场景面试题
本项目聚焦AI客服与智能分析,集成Ollama、MaxKB与百度云千帆大模型,实现RAG问答、健康分析等功能。采用Spring AI框架,通过API调用7B/14B级大模型,结合本地部署与云端资源,优化数据同步、模型微调与推理流程,提升响应准确率。涵盖AIGC应用、图像处理心得及DDPM等算法实践,构建高效、可扩展的智能服务体系。
|
5月前
|
JSON Java 数据格式
String转JSON
该代码段演示了如何将字符串解析为JSON对象。通过`JSONObject.fromObject()`方法将包含中文的JSON字符串转换为JSONObject实例,并输出其标准格式化内容,适用于Java中处理JSON数据的场景。
|
5月前
|
JSON fastjson 数据格式
JSON转List
该方法将JSON字符串转换为指定类型的对象列表,利用FastJSON的parseArray实现,适用于处理JSON数组格式数据,返回泛型List,提升代码复用性与可读性。
|
5月前
|
JSON fastjson 数据处理
JSON转Map
该代码段演示了如何使用Fastjson将JSON字符串转换为Map对象。通过`JSONObject.parse()`方法解析JSON字符串,并强制转换为Map类型,便于后续数据处理与访问。
|
5月前
|
JSON fastjson Java
JSON转Object
该方法将JSON字符串转换为指定类型的Java对象,利用FastJSON库实现解析,适用于POJO类的数据反序列化,简洁高效,广泛用于Web开发中的数据处理。
|
5月前
|
JSON Java 数据格式
Object转JSON
该方法将Java对象转换为JSON字符串,使用JSONArray.fromObject实现序列化,并输出转换结果日志,最后返回生成的JSON字符串。适用于对象数据的JSON格式化处理。