Boot/Cloud使用系统自带的Scheduled定时任务

蚊子 2023年03月25日 405次浏览

前言:

它的作用就是,你设置一个时间段或者设置每隔多久执行一次东西
Scheduled是系统自带的所以只要有web依赖就可以了
web依赖全名:spring-boot-starter-web

缺点:
Spring定时任务存在的问题:

  • 不支持集群部署:比如你启动三个实例,每个实例都会去触发执行器去执行“优惠券要过期给用户发送一个提醒”这个任务,这时候就产生了重复执行的问题。
  • 通常是单机部署的,单机就存在挂掉的风险。
  • 不支持失败重试: 出现异常后任务终结,不能根据执行状态,控制任务重新执行
  • 不支持动态管理:不重启任务情况下,关闭和启动任务,修改cron表达式等。
  • 无报警:任务失败后不能发送报警通知
  • 不支持分片任务

开始

依赖

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

application.yml

server:
  port: 9090

代码

@Scheduled(cron = “写执行时间表达上”)

@Component
public class MyTask {
    //cron 一共可以有7个参数,以空格分开,年不是必须参数
    //[秒] [分] [小时] [日] [月] [周] [年]
    //每天凌晨零点执行
    @Scheduled(cron ="0 0 0 * * * ?")
    public void run() {
        System.out.println("到00:00啦,代码开始执行了");
    }
}

启动类

package com.zb;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling   //启动定时任务
public class AllApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(AllApplication.class, args);


    }
}


cron参数讲解

cron它是一个表达式,最多接收7个参数
从左到右分别表示:秒 分 时 天 月 周 年;
参数以空格隔开,其中年不是必须参数,可以省略

cron参数:

含义 是否必须 参数范围 可填通配符
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * ? / L W
1-12 , - * /
1-7 , - * ? / L #
1970-2099 , - * /

常用通配符:
*:表示所有值 比如用在日 表示每一天。

?:表示不指定值 比如周配置 表示不指定星期几执行。

/:表示递增触发 比如 用在分 5/20 从第五分钟开始 每增加20分钟执行一次。

-:表示区间 比如用在 1-6 表示一月到六月执行。

常用cron参数

零点执行

@Scheduled(cron ="0 0 0 * * * ?")

每隔1分钟执行

@Scheduled(cron ="0 */5 0 * * * ?")

更多详细解释请前往:https://blog.csdn.net/sunp_csdn/article/details/122824185