Skip to content

Spring Task

Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某段代码

cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发时间

构成规则:分为6或者7个域,由空格分隔开,每个域代表一个含义

分别为:秒、分钟、时间、日、月、周、年(可选)

  • * 符号代表所有可能的值。例如,在分钟字段中,*代表每一分钟
  • ? 符号代表不确定的值,一般用在日或者星期字段。在这两个字段中必须至少有一个使用?,来表示不指定值。例如,如果在日字段中使用?,则表示每月的哪一天执行任务都可以,具体的日期不确定
  • /符号代表"每",比如在秒字段中,5/15表示从第5秒开始,每15秒执行一次
  • ,符号代表"和",用于列出两个或更多的值,例如在小时字段中,3,5表示第3小时和第5小时
  • -符号代表"范围",在小时字段中写5-7,那就意味着在第5, 6, 7小时执行任务
image-20230917194623450

在线生成器:https://cron.qqe2.com/

代码示例

启动类上添加@EnableScheduling开启定时任务,将任务类注册为Bean,使用@Scheduled注解的方法开启定时任务

MyTask.java

java
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;

import java.util.Date;

@Component
@Slf4j
public class MyTask {

    // 不需要Lombok库或其他注解处理器的支持
//    private static final Logger logger = LoggerFactory.getLogger(CacheMapConfig.class);

    // 从"任意"第1秒开始,每5秒执行一次任务,无论分钟、小时、日期、月份和星期几
    // "5 * * * * ?"代表每分钟的第五秒执行一次
    @Scheduled(cron = "1/5 * * * * ?")
    public void executeTask() {
        log.info("定时任务开始执行:{}", new Date());
    }
}
image-20230918150202411