Spring Boot:开启定时执行的任务

在开发过程中经常需要用到定时执行某项任务的需求,这里记录下在SpringBoot中开启定时任务的过程。

1 启用定时任务

在SpringBoot应用程序入口类添加注解@EnableScheduling,开启定时任务支持,这里相当于一个总开关,没有这个注解后面的步骤都无效。如下图:
在这里插入图片描述

2 实现定时任务类

定义一个组件类,在需要定时执行的方法上添加注解@Scheduled,该注解根据参数不同可分为两种类型的定时任务:

  1. cron表达式类型
  2. 固定频率类型

2.1 定时任务类完整代码

@Component
public class ScheduledTask {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 每秒钟执行一次
     */
    @Scheduled(cron = "*/1 * * * * ?")
    public void cronTask() {
        this.logger.info("cronTask running:{}", new Date().toString());
    }

    /**
     * 首次执行延迟5秒,之后每一秒执行一次
     */
    @Scheduled(fixedDelay = 1000, initialDelay = 5000)
    public void delayedTask() {
        this.logger.info("delayed Task running:{}", new Date().toString());
    }
}

2.2 cron表达式类型

这种类型主要就是cron表达式的写法,可实现各种类型的定时任务。下面列出几种典型的表达式写法:

# 每天上午10点,下午2点,4点
"0 0 10,14,16 * * ?"

# 朝九晚五工作时间内每半小时
"0 0/30 9-17 * * ?"

# 表示每个星期三中午12点
"0 0 12 ? * WED"

# 每天中午12点触发
"0 0 12 * * ?"

# 每天上午10:15触发
"0 15 10 ? * *"

# 每天上午10:15触发
"0 15 10 * * ?"

# 每天上午10:15触发
"0 15 10 * * ? *"

# 2005年的每天上午10:15触发
"0 15 10 * * ? 2005"

# 在每天下午2点到下午2:59期间的每1分钟触发
"0 * 14 * * ?"

# 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14 * * ?"

# 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0/5 14,18 * * ?"

# 在每天下午2点到下午2:05期间的每1分钟触发
"0 0-5 14 * * ?"

# 每年三月的星期三的下午2:10和2:44触发
"0 10,44 14 ? 3 WED"

# 周一至周五的上午10:15触发
"0 15 10 ? * MON-FRI"

# 每月15日上午10:15触发
"0 15 10 15 * ?"

# 每月最后一日的上午10:15触发
"0 15 10 L * ?"

# 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L"

# 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005"

# 每月的第三个星期五上午10:15触发
"0 15 10 ? * 6#3"

应用启动后,任务执行情况如下图:
在这里插入图片描述

2.3 固定频率类型

这种适用于按照比较单一频率执行任务,可设置初始化延迟时间,相对于cron类型比较简单。
应用启动后,任务执行情况如下图:
在这里插入图片描述

3 需要注意的地方

由于定时任务由框架自动执行,所以在任务执行方法中需要尽可能处理所有可能出现的异常,防止应用因未捕获的异常退出。

4 参考

[1] cron表达式详解

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值