简单的注解@Scheduled,轻松搞定 SpringBoot 的定时任务

实现指南

几个简单的注解,轻松搞定 SpringBoot 的定时任务

创建一个用于执行定时任务的类并在类上添加以下三个注解

  • @Component 加入IOC容器
  • @Configuration 设置为配置类
  • @EnableScheduling 开启定时任务,声明使用 scheduled

类中创建执行定时任务的方法并在方法上添加注解

  • @Scheduled
    @Scheduled 注解被ScheduledAnnotationBeanPostProcessor 类所拦截
    SpringBoot使用 @scheduled 定时任务,执行的时候是在一个单线程中,如果前一个任务执行时间过长,则有可能会导致其他后续任务被阻塞,直到该任务执行完成。

此处推荐学习一下cron表达式的使用: https://www.matools.com/cron

案例
/**
 * @Author zqc
 * @Date 2020/9/29-13:59
 * @Description 定时任务类
 * 任务的类上写:
 * @Component           加入IOC容器
 * @Configuration       设置为配置类
 * @EnableScheduling    开启定时任务
 *
 * 任务方法上写@Scheduled
 */
@Component
@Configuration
@EnableScheduling
public class Jobs {

    /**
     * 单位是毫秒
     * fixedRate是每多次分钟一次,不论业务执行花费了多少时间,都是1分钟执行1次,
     * fixedDelay是当任务执行完毕后1分钟在执行
     */
    //表示方法执行完成后5000毫秒
    @Scheduled(fixedDelay = 5000)
    public void fixedDelayJob() throws InterruptedException {
        System.out.println("fixedDelay 每隔5秒" + new Date());
    }

    //表示每隔3000毫秒
    @Scheduled(fixedRate = 3000)
    public void fixedRateJob() {
        System.out.println("fixedRate 每隔3秒" + new Date());
    }

    /**
     * cron生成器: https://www.matools.com/cron
     * cron 共7位,  秒 分 时 日 月 星期 年
     * 第一位,表示秒,取值0-59
     * 第二位,表示分,取值0-59
     * 第三位,表示小时,取值0-23
     * 第四位,日期天/日,取值1-31
     * 第五位,日期月份,取值1-12
     * 第六位,星期,取值1-7,星期天,星期一...,注:不是第一周,第二周的意思;另外:1表示星期天,2表示星期一
     * 第七位,年份,可以留空,取值1970-2099
     *
     * (*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年...
     * (?)问号:问号只能出现在日期和星期这两个位置。
     * (-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12
     * (,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四
     * (/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60
     */
    //每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
    @Scheduled(cron = "0 0/5 14,18 * * ?")
    public void cronJob() {
        System.out.println("每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发:"+new Date());
    }

    //每天下午2点到下午2:55期间的每5分钟触发
    @Scheduled(cron = "0 0/5 14 * * ?")
    public void cronJobOneHour() {
        System.out.println("每天下午2点到下午2:55期间的每5分钟触发:"+new Date());
    }

    //表示每5分钟执行一次,是整点的5分钟,不是程序启动后开始计算的每5分钟
    @Scheduled(cron = "0 0/5 * * * ?")
    public void cronJob5Minutes() {
        System.out.println("每5分钟执行一次:"+new Date());
    }

}
cron 表达式配在 application.yml 中
#application.yml中的配置
scheduled:
  cron: * 0/5 * * * ?

@Scheduled 中获取这个配置

@Scheduled(cron = "${scheduled.cron}")
推荐阅读
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值