Bootstrap

Springboot 定时任务

在项目开发中经常需要执行一些定时任务,比如需要在每天凌晨的时候,分析前一天的日志信息。 Spring 为我们提供了异步执行任务调度的方式,提供了 、 接口。

其实在 Springboot 中使用定时任务非常简单,只需要用到两个注解即可。

  • 标注在需要开启定时任务的方法上

  • 标注在 springboot 的主启动类上,用于开启基于注解的定时任务

下面看下示例代码:

/**
* springboot 主启动类
*/
@EnableScheduling
@SpringBootApplication  // 开启基于注解的定时任务
public class SpringbootAmqpApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootAmqpApplication.class, args);
    }
}


//-----------------------------------------------------------------------------------
/**
 * 测试 springboot 定时任务
 * @auther hepingfly
 * @date 2020/9/21 11:52 下午
 */
@Service
public class ScheduledService {

    /**
     * 秒 分 时 日 月 周几
     * 0 * * * * MON-FRI
     * 上面就表示周一到周五,每分钟的第 0 秒开始执行
     */
    @Scheduled(cron = "0 * * * * MON-FRI")  //这样每分钟都会运行一次这个方法
    public void attention() {
        System.out.println("欢迎关注 hepingfly");
    }
}

再说一下这个 cron 表达式可以写哪些东西:

cron 表达式写法示例:

① 0 * * * * MON-FRI          这个表示周一到周五,每分钟的第 0 秒开始执行
② 0,1,2,3 * * * * MON-FRI    这个表示周一到周五,每分钟的第 0,1,2,3 秒开始执行
③ 0-3 * * * * MON-FRI        表示含义与第 ② 种相同
④ 0/4 * * * * MON-FRI		     这个表示周一到周五,每 4 秒执行一次
⑤ 0 0/5 14,18 * * ? 		     这个表示每天 14 点整和 18 点整,每隔 5 分钟执行一次
⑥ 0 15 10 ? * 1-6			       这个表示每个月的周一至周六 10:15 分执行一次
⑦ 0 0 2 ? * 6 L 			       每个月的最后一个周六凌晨 2 点执行一次
⑧ 0 0 2 LW * ?				       每个月的最后一个工作日凌晨 2 点执行一次
⑨ 0 0 2-4 ? * 1#1			       每个月的第一个周一凌晨 2 点到 4 点之间,每个整点都执行一次