什么是定时任务通过时间表达式来进行调度和执行的一类任务被称为定时任务。一般能解决的业务场景:定时对账、服务到期的定时提醒、订单超时未支付的自动取消等。有哪些定时任务实现方案单体架构调度技术● 轮询+线程休眠while(true) + Thread.sleep● java.util.Timer + java.util.TimerTaskTimer是一个定时器工具,用来在一个后台线程计划执行指定任务,它可以计划执行一个任务或反复多次
TimerTask是一个抽象类,它的子类代表一个可以被Timer计划执行的任务● ScheduledExecutorServiceJDK1.5之后作为并发工具被引入,默认只支持周期性的执行频率(如每秒/每分钟),要支持具体某一刻年月日时分秒的执行窗口需要自定义扩展,较麻烦● Quartz开源任务调度框架,Java语言编写实现,支持Spring整合使用● SpringTaskspring框架提供的轻量级定时任务调用工具
SpringBoot框架下可使用注解:@EnableScheduling+@Scheduled,底层还是SpringTask分布式架构调度技术分布式场景可能遇到的问题● 多台机器集群部署的定时任务如何保证不被重复执行● 如果在不重启服务前提下,动态调整定时任务执行时间● 部署定时任务的机器发生故障如何故障转移● 如何对定时任务做任务监控业界解决方案● 淘宝:TBSchedule,现在是:ScheduleX● 当当:Elastic-Job● 唯品会:Saturn,基于当当的二次开发,新增一些特性● 大众点评:XXL-JOB