详解Cron表达式-原来是那么简单
Cron表达式是一个具有时间含义的字符串,字符串以5~6个空格隔开,分为6~7个域,格式为X X X X X X X。其中X是一个域的占位符。最后一个代表年份的域非必须,可省略。单个域有多个取值时,使用半角逗号,隔开取值。 Cron表达式是一种广泛用于定时任务调度的工具,它基于字符串的形式定义了任务的执行时间。这个表达式由5到6个(有时是7个)空格分隔的字段组成,每个字段代表一个时间维度,从秒到年。具体格式为{秒}{分钟}{小时}{日期}{月份}{星期}{年份},其中年份字段可以省略。 1. **秒数**:允许的值范围是0到59,不允许为空。可用的特殊字符包括: - `*`:代表每秒触发。 - `,`:用于指定多个具体的秒数,如"0,15,45"代表0秒、15秒和45秒触发任务。 - `-`:表示一个范围,如"25-45"代表25秒至45秒之间每隔1秒触发。 - `/`:代表步进值,例如"0/20"或"/20"表示从0秒开始每隔20秒触发,"5/20"表示从5秒开始每隔20秒触发。 2. **分钟**:与秒数相同,允许的值也是0到59,且不允许为空。 3. **小时**:允许的值范围是0到23,对应一天中的24个小时,同样不允许为空。 4. **日期**:允许的值范围是1到31,代表一个月中的日期,同样不允许为空。`?`可以用于表示日期没有特殊要求。 5. **月份**:允许的值范围是1到12,代表一年中的月份,不允许为空。`?`也可以用于月份,表示没有特殊要求。 6. **星期**:允许的值范围是1到7,其中1代表星期日,7代表星期六。同时,可以使用英文缩写,如"SUN-SAT"。不允许为空。 7. **年份**:允许的值范围是1970到2099,但可以留空。如果包含年份,必须符合该范围。 8. **特殊字符和规则**: - `?`:仅能用于日期和星期,表示没有特定的值。 - `L`:代表“Last”,在日期字段中表示月份的最后一天,在星期字段中表示星期六(默认)或指定的星期几(如"LW"表示最后的工作日)。 - `W`:代表“Workday”,用于确定最近的工作日。 - `#`:用于指定每月的第几个星期几,如"5#3"表示每个月的第三个星期五。 9. **实例解析**: - "30 * * * * ?":每半小时触发一次。 - "30 10 * * * ?":每天的10点30分触发。 - "30 10 1 * * ?":每月的1日10点30分触发。 - "30 10 1 20 * ?":每年20日的1点10分30秒触发。 - "15,30,45 * * * * ?":每15秒,30秒,45秒触发一次任务。 理解Cron表达式的各个字段和特殊字符的含义,可以帮助我们更精确地设定定时任务,满足各种复杂的调度需求。在编写Cron表达式时,应确保每个字段的值合法,避免引发SchedulerException异常。通过熟练掌握这些规则,我们可以创建出灵活且精确的任务调度方案。