定时任务概述

简介: 定时任务是通过时间表达式调度执行的任务,适用于定时对账、超时取消等场景。实现方案包括单体架构中的轮询休眠、Timer、ScheduledExecutorService、Quartz及SpringTask;分布式架构下则面临重复执行、动态调整等问题,主流解决方案有XXL-JOB、Elastic-Job、Saturn和ScheduleX等。

什么是定时任务

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

有哪些定时任务实现方案

单体架构调度技术

  • 轮询+线程休眠

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月前
|
Kubernetes 负载均衡 网络协议
裸机 Kubernetes 负载均衡全景:从 MetalLB、Service 到 Ingress,再到云厂商实现原理
本文系统解析裸机Kubernetes中MetalLB、Service与Ingress的协作机制,深入剖析LoadBalancer实现原理,对比云厂商方案,揭示高可用、IP稳定与网络分层真相,助你构建媲美公有云的生产级流量入口体系。
|
2月前
|
Java 数据库连接 调度
xxljob执行源码分析
本文深入解析XXL-JOB分布式任务调度框架源码,涵盖架构设计、核心执行流程与关键线程池机制。内容包括任务触发、注册、失败重试、日志报告及时间轮调度原理,结合带中文注释的源码包与分析导图,全面剖析其高性能设计实现。
 xxljob执行源码分析
|
2月前
|
SQL 运维 分布式计算
如何做好SQL质量监控
SLS推出用户级SQL质量监控功能,集成于CloudLens for SLS,提供健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,助力用户全面掌握SQL使用情况,提升日志分析效率与治理能力。
|
2月前
|
人工智能 Serverless API
一键部署Stable Diffusion教程
本教程指导用户通过阿里云函数计算一键部署Stable Diffusion,支持多种绘图风格,提供免费额度体验。包含详细步骤与注意事项,助力快速搭建AI绘画环境。
一键部署Stable Diffusion教程
|
2月前
|
jenkins Java 持续交付
SpringBoot集成Jenkins
本文介绍在阿里云CentOS系统上安装配置Jenkins的完整流程,涵盖环境准备(JDK1.8)、Jenkins安装与启动、端口及用户配置、Git与Maven集成,并包含插件安装与初始设置步骤,助力实现持续集成部署。
 SpringBoot集成Jenkins
|
2月前
|
运维 Devops 开发工具
生产环境缺陷管理
git-poison基于go-git实现分布式bug追溯,通过“投毒-解毒-银针”机制,自动化管理多分支开发中的bug修复与发布卡点,避免人为疏漏导致的生产故障,提升团队协作效率与发布安全性。
|
2月前
|
缓存 Dubbo Java
6.什么是API网关
API网关作为微服务架构的统一入口,负责请求路由、协议转换、鉴权、限流、熔断降级等功能,简化客户端与后端服务的交互,提升系统安全性与可维护性。常见实现有Kong、Soul、Zuul等。
|
Kubernetes 容器 Perl
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
17850 0