什么是定时任务
现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了。
通过时间表达式来进行调度和执行的一类任务被称为定时任务
很多业务需求的实现都离不开定时任务,例如备忘录提醒、闹钟等功能。
定时任务的实现方式:
- Timer和TimerTask
- ScheduledExecutorService
- 三方框架 Quartz
时间表达式:
时间表达式来控制任务的调度与执行,时间表达式又称为:cron表达式
cron表达式用于配置cronTrigger的实例。cron表达式实际上是由七个子表达式组成。这些表达式之间用空格分隔,如 :" * * * * * * ? * "
从前到后依次代表:
1.Seconds (秒)
2.Minutes(分)
3.Hours(小时)
4.Day-of-Month (天)
5.Month(月)
6.Day-of-Week (周)
7.Year(年)
例如 :“ * 30 12 5 * * ? * ” 就代表每个月的5号中午12点30执行
Cron表达式的格式:
秒 分 时 日 月 周 年(可选)
字段名 | 允许的值 | 允许的特殊字符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小时 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W C |
月 | 1-12 or JAN-DEC | , - * / |
周 | 1-7 or SUN-SAT | , - * ? / L C # |
年(可为空) | empty | 1970-2099 , - * / |
字符含义:
" * ":代表所有可能的值。在哪个字段中代表哪个含义
" - ":表示指定范围。
" , " :表示可有多个值。例如:“ * 10,20 12 * * * ? * ”,“10,20”代表在12点10分和12点20分都会触发。
" / " :表示执行过程。例如:“ * 10/20 12 * * * ? * ”,表示在每天的12点钟这个小时内从10分钟开始,每20分钟执行一次
" L" :在月字段中," L" 表示一个月的最后一天;在周字段中," L"表示一个星期的最后一天
" ? " :与 " * "含义类似,但为了避免冲突,一般在日字段 和周字段 使用时 需要将另外一个的值设为 " ? "