首先通过在线Cron表达式生成器生成想要的定时时间:在线Cron表达式生成器 (qqe2.com)
Cron表达式:生成后一般有7位,但是SpringBoot更新后只支持6位Cron表达式,将最后一位年份指定去掉即可,另外部署SpringBoot的定时方法不可以有入参否则会报错,而且一般也不设置返回值,还有定时任务所在的类必须交由Spring管理(加Spring注解)
Cron表达式组成:
cron表达式是一个字符串,由6到7个字段组成,用空格分隔。其中前6个字段是必须的,最后一个是可选的。
从左到右,依次对每个字段指定相应的值,就可以确定一个任务的执行时间点和周期了。
值可以由数字配合字符来组合。
99%的情况下会用到的字符:
在大部分使用cron的场景下, - * / ? 这几个常用字符就可以满足我们的需求了。
- 【*】:每的意思。在不同的字段上,就代表每秒,每分,每小时等。
- 【-】:指定值的范围。比如[1-10],在秒字段里就是每分钟的第1到10秒,在分就是每小时的第1到10分钟,以此类推。
- 【,】:指定某几个值。比如[2,4,5],在秒字段里就是每分钟的第2,第4,第5秒,以此类推。
- 【/】:指定值的起始和增加幅度。比如[3/5],在秒字段就是每分钟的第3秒开始,每隔5秒生效一次,也就是第3秒、8秒、13秒,以此类推。
- 【?】:仅用于【日】和【周】字段。因为在指定某日和周几的时候,这两个值实际上是冲突的,所以需要用【?】标识不生效的字段。比如【0 1 * * * ?】就代表每年每月每日每小时的1分0秒触发任务。这里的周就没有效果了。
极少能用到的字符:
- SUN:仅用于【周】字段,表示星期日。也可以用数字1设置。周日到周六分别为SUN,MON,TUE,WED,THU,FRI和SAT,对应数字1,2,3,4,5,6,7。目前Quartz支持。
- L:即last,用于【日】【周】字段。这里需要注意的是,在不同的字段的不同使用方式,其含义有所差别。
- 用于日字段:直接使用L代表每个月的最后一天。也支持偏移量的方式,配置[L-1]则代表每月的倒数第二天。
- 用于周字段:直接使用L代表每周的最后一天,也就是等效于[7]或[SAT],但是如果配合上数字,比如[7L],则代表每个月最后一个周六,等效于[SATL]。目前Quartz支持。
生成Cron表达式之后,SpringBoot实现定时任务:
@Component 可换成其他的的Spring管理类的注解,主要是将定时器所在类交给Spring管理(不加会报错)
@EnableScheduling 用于开启定时任务
@Scheduled(cron="cron表达式") 用于放设置的定时时间