下面是一个简单的定时任务:
@Slf4j@Component@EnableSchedulingpublic class TaskDemo {@Scheduled(cron = "*/1 * * * * ?")public void printTime() throws InterruptedException {log.info("此刻时间 {}", LocalDateTime.now());}}
cron 表达式有 6 位,是必须的,从左到右分别表示:秒、分、时、日、月、周
。
当然也有可能是 7 位,那么最后一位就是年(一般省略不写):秒、分、时、日、月、周、年
。
取值说明:正常认识,秒分都是 0 - 59,时则是 0 - 23,日则是 1 - 31,月则是 1-12,周则是 1 - 7 。年则只有 1970 - 2099
每一位都可以用数字表示,当然还可以用一些特殊字符表示,比如上面出现的 */1 * * * * ?
,第 1 位的 */1
表示任意秒每隔1秒,第 2 位的 *
表示任意分钟,以此类推 。
详细可参考这里:简书-Cron表达式的详细用法上面的代码运行之后,控制台输出:
Cron 生成工具:https://cron.qqe2.com/
2022-10-25 14:26:22.013INFO 18304 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 此刻时间 2022-10-25T14:26:22.0132022-10-25 14:26:23.010INFO 18304 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 此刻时间 2022-10-25T14:26:23.0102022-10-25 14:26:24.011INFO 18304 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 此刻时间 2022-10-25T14:26:24.0112022-10-25 14:26:25.011INFO 18304 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 此刻时间 2022-10-25T14:26:25.011
可以看到,确实是每隔 1 秒执行一次 printTime()
这个定时任务 。@Scheduled 的另外两个属性
@Scheduled
注解除了 cron
这个属性外,还有 fixedRate
属性和 fixedDelay
属性,同理,就是固定频率触发定时任务和固定延迟触发定时任务fixedRate
@Slf4j@Component@EnableSchedulingpublic class TaskDemo {/*** 当前任务执行到下一个任务开始的时间(固定频率开始执行一个任务,每5秒执行),都是单线程处理的**/@Scheduled(fixedRate = 5000)public void printTime1() throws InterruptedException {log.info("任务开始------- {}", LocalDateTime.now());Thread.sleep(1000);log.info("任务完成------- {}", LocalDateTime.now());}}
控制台输出:2022-10-25 14:54:04.824INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:54:04.8242022-10-25 14:54:05.833INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:54:05.8332022-10-25 14:54:09.834INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:54:09.8342022-10-25 14:54:10.843INFO 23520 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:54:10.843
当然,如果任务的处理逻辑超过了固定的频率时间,比如我们修改下 Thread.sleep(1000)
,模拟成 6 秒,即 Thread.sleep(6000)
,那么输出如下:2022-10-25 14:57:04.212INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:04.2122022-10-25 14:57:10.227INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:57:10.2272022-10-25 14:57:10.227INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:10.2272022-10-25 14:57:16.241INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:57:16.2412022-10-25 14:57:16.242INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:16.2422022-10-25 14:57:22.243INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务完成------- 2022-10-25T14:57:22.2432022-10-25 14:57:22.243INFO 9324 --- [scheduling-1] cn.god23bin.demo.task.TaskDemo: 任务开始------- 2022-10-25T14:57:22.243
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2023年9月28日挖坟墓行吗 2023年9月28日挖坟墓黄道吉日
- 2023年9月28日适合修造坟墓吗 2023年9月28日是修造坟墓的黄道吉日吗
- 2023年9月28日是制作棺材吉日吗 2023年9月28日是制作棺材的黄道吉日吗
- 菜粉蝶竟是我自己是什么梗什么意思 为什么白纸可以吸引菜粉蝶
- 变脸是我国哪个著名剧种的绝活 变脸一共能变几张脸
- realme真我v15什么时候发布_realme锦鲤手机发布时间
- 真我GTNeo2T测评_真我GTNeo2T续航情况测试
- 闻道Go语言,6月龄必知必会
- Work & Play 这是我们这一代是什么歌
- 吃避孕药失败的人多吗