SpringBoot项目-定时任务

1、首先在启动类上加上@EnableScheduling注解

@SpringBootApplication
@EnableScheduling //开启定时功能的注解,放在主入口
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }

}

2、写定时任务

@RestController
public class TimerController {
    /**
     * 秒   分   时     日   月   周几
     * 0 * * * * 1-7
     * 注意cron表达式的用法:
     * 这里是每2秒执行一次
     */
    @Scheduled(cron = "0/2 * * * * ?")
    public void hello() {
        System.out.println("定时任务执行了.....");
    }
}

3、启动项目定时任务根据cron表达式执行

4、cron表达式的用法

cron表达式通过特定的规则指定时间,用于定时任务,本文简单记录它的部分语法和实例,并不完全,能覆盖日常大部分需求。

1. 整体结构
cron表达式是一个字符串,分为6或7个域,每两个域之间用空格分隔,其语法格式为:

“秒域 分域 时域 日域 月域 周域 年域”

其中,年域可以省略,省略时表示每年。

2. 每个域的取值范围

域名可取值可取符号(仅列部分常用)
秒域0~59的整数* - , /
分域0~59的整数* - , /
时域0~23的整数* - , /
日域1~31的整数* - , / ? L
月域1 ~ 12的整数或JAN~DEC* - , /
周域1 ~ 7的整数或SUN~SAT* - , / ? L #
年域1970~2099的整数* - , /

3. 符号的意义

(1)* 表示可以匹配该域的所有值;

例如,"0 0 13 * * ?"表示每天的13点执行一次。

(2)?在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;

它与*的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;

例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,"0 0 5 ? * 3"表示每个周三5点钟执行而无论是几号。

(3)- 表示匹配该域上的一个范围;

例如,"0 30 9-15 ? * *"表示每天的9:30-15:30每小时执行一次,"0 1-5 * ? * 1"表示每周日每个小时的1-5分钟每分钟执行一次。

(4), 表示枚举值;

例如,"0 0 8,16,23 ? * 1,7"表示每个周六日的8点、16点、23点各执行一次。

(5)/ 表示起始时间和间隔时间;

例如,"0 0 3/5 * * ?"表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次,

"*/5 * * * * ?"表示每隔5秒钟执行一次,"0 */1 * * * ?"表示每隔1分钟执行一次。

(6)# 只能用于周域上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;

例如,"0 0 0 ? * 5#2"表示每个月第2个周四零点执行,"15 30 6 ? * 7#5"表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。

(7)L 只能用于日域或周域,用于日域时表示当月最后一天,用于周域如果前面不加数字表示周六,加数字表示最后一个周值;

例如,"0 0 23 L * ?"表示每月最后一天的23点执行,"0 0 23 ? * L"表示每周六的23点执行,"0 0 23 ? * 3L"表示每月最后一个周二的23点执行。

4. 一些常见的实例(省略双引号)

意义表达式
每隔5秒钟执行一次*/5 * * * * ?
每隔1分钟执行一次0 */1 * * * ?
每天1点执行一次0 0 1 * * ?
每天23点55分执行一次0 55 23 * * ?
每月最后一天23点执行一次0 0 23 L * ?
每周六8点执行一次0 0 8 ? * L
每月最后一个周五,每隔2小时执行一次0 0 */2 ? * 6L
每月的第三个星期五上午10:15执行一次0 15 10 ? * 5#3
在每天下午2点到下午2:05期间的每1分钟执行0 0-5 14 * * ?
表示周一到周五每天上午10:15执行0 15 10 ? * 2-6
每个月的最后一个星期五上午10:15执行0 15 10 ? * 6L
每天上午10点,下午2点,4点执行一次0 0 10,14,16 * * ?
朝九晚五工作时间内每半小时执行一次0 0/30 9-17 * * ?
每个星期三中午12点执行一次0 0 12 ? * 4
每年三月的星期三的下午2:10和2:44各执行一次0 10,44 14 ? 3 4
每月的第三个星期五上午10:15执行一次0 15 10 ? * 6#3
每月一日凌晨2点30执行一次0 30 2 1 * ?
每分钟的第10秒与第20秒都会执行10,20 * * * * ?
每月的第2个星期的周5,凌晨执行0 0 0 ? * 6#2

为防止原文失效,转载此贴。原文链接:https://www.cnblogs.com/dubhlinn/p/10740838.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值