开发者学堂课程【SpringBoot 快速掌握 - 高级应用:定时任务】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/613/detail/9310
定时任务
内容介绍
一.定时内容
二.cron 表达式的书写
一.定时内容
项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息。
Spring 为我们提供了异步执行任务调度的方式,提供 TaskExecutor 、TaskScheduler接口。
两个注解:EnableScheduling、@Scheduledcron 表达式:
Cron 表达式:
字段 |
允许值 |
允许的他叔字符 |
秒 |
0-59 |
,-*/ |
分 |
0-59 |
,-*/ |
小时 |
0-23 |
,-*/ |
日期 |
1-31 |
,-*/?/Lwc |
月份 |
1-12 |
,-*/ |
星期 |
0-7或 SUN-SAT 0,7 是SUN |
,-*?/LC# |
特殊字符 |
代表意义 |
, |
枚举 |
- |
区间 |
* |
任意 |
/ |
步长 |
? |
日/星期冲突匹配 |
L |
最后 |
C |
和 calendar 联系后计算过的值 |
# |
星期,4#2,第2个星期三 |
测试
创建一个 service,
Name:scheduledservice
package com.atguigu.task.service;
importorg.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class ScheduledService {
/**
* second(秒),minute(分) , hour(时) , day of month(日) , month(月) , day of week(周几).* * ***MON-FRI
*/
@Scheduled(cron = "****MON-SAT")
public void hello(){
System.out.println( "hello ... ");
测试运行,查看整分钟会不会启动,注意观察控制台,发现控制台并没有打印,
原因就是一定要在 springboot04taskApplication 开启定时任务,
package com.atguigu.task;
import ...
nableAsync 1/开启异步注解功能
@EnableScheduling 1/开启基于注解的定时任务
@SpringBootApplication
public class Springboot04TaskApplication {
public static void main(String[ ] args) {
SpringApplication.run(Springboot04TaskApplication.class, args);
重启后,控制台有打印”hello”.
二.cron 表达式的书写
1.Cron表达式书写实例
package com.atguigu.task.service;
importorg.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class ScheduledService {
/**
second(秒) , minute (分) , hour(时) , day of month(日) , month(月) , day of week(周几).
*****MON-FRI
/@scheduled( cron = "***MON-SAT")
scheduled( cron = "0,1,2,3,4**** MON-SAT")
public void hello(){
System.out.println("he11o ... ");
2.-代表区间
package com.atguigu.task.service;
importorg.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class ScheduledService {
/**
second(秒) , minute (分) , hour(时) , day of month(日) , month(月) , day of week(周几).
*****MON-FRI
/@scheduled( cron = "***MON-SAT")
scheduled( cron = "0-4**** MON-SAT")
public void hello(){
System.out.println("he11o ... ");
3.“/”代表步长
/**
second(秒) , minute (分) , hour(时) , day of month(日) , month(月) , day of week(周几).
*****MON-FRI
/@scheduled( cron = "***MON-SAT")
//scheduled( cron = "0/4**** MON-SAT")
//每四秒启动一次
public void hello(){
System.out.println("he11o ... ");
4.其他的一些表达式
* 【0 0/5 MN4,18* *?】每天14点整,和18点整,每隔5分钟执行一次
*【0 15 10 ? *1-6】每个月的周一至周六10:15分执行一次
*【0 0 2 ? * 6L】每个月的最后一个周六凌晨2点执行一次
*【0 0 2 Lw* ?】每个月的最后一个工作日凌晨2点执行一次
*【0 0 2-4 ? * 1#1】每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;