我们可以先思考一下业务场景的解决方案:
-
某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。
-
某银行系统需要在信用卡到期还款日的前三天进行短信提醒。
-
某财务系统需要在每天凌晨0:10结算前一天的财务数据,统计汇总。
-
12306会根据车次的不同,设置某几个时间点进行分批放票。
-
某网站为了实现天气实时展示,每隔10分钟就去天气服务器获取最新的实时天气信息。
以上业务场景的解决方案就是任务调度。
任务调度是指系统为了自动完成特定任务,在约定的特定时刻去执行任务的过程。有了任务调度即可解放更多的人力,而是由系统自动去执行任务。
如何实现任务调度?
-
多线程方式,结合sleep
-
JDK提供的API,例如:Timer、ScheduledExecutor
-
框架,例如Quartz ,它是一个功能强大的任务调度框架,可以满足更多更复杂的调度需求
但是上述这些解决方案要么实现起来比较繁琐,要么不能满足分布式架构需求,我们需要更好的解决方案。