• SpringTask定时任务---知识点


    1.@Scheduled注解

    哪个方法需要周期性执行,就在哪个方法上添加注解@Scheduled。通过这个注解可以设置执行任务的周期

    @Scheduled注解常用的属性有:

    属性名说明
    fixedDelay毫秒值(long类型)。表示:上次任务完毕后,间隔多长时间开始下次任务
    fixedRate毫秒值(long类型)。表示:上次任务开始后,间隔多长时间开始下次任务
    initialDelay毫秒值(long类型)。表示:延迟多长时间后,才开始第一次fixedDelay或fixedRate任务
    cron配置一个cron表达式,按照表达式的设置执行任务
    @Component
    public class AnalysisJob {
    
    	/**
    	 * 应用启动后,等待10000毫秒执行第一次,然后每隔5000毫秒,执行一次本方法
    	 */
        @Scheduled(fixedRate = 5000, initialDelay = 10000)
        public void analysis() throws InterruptedException {
            System.out.println(new DateTime().toString("yyyy-MM-dd HH:mm:ss.SSS"));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2. CRON表达式

    对于定时任务,我们使用的时候主要是注重两个方面,一个是定时任务的业务,另一个就是Cron表达式。

    CRON的六个域

    月份和星期的名称是不区分大小写的,即FRI 和 fri等价。 域之间使用空格分隔

    名称是否必须允许值特殊字符
    0-59, - * /
    0-59, - * /
    0-23, - * /
    1-31 , - * ? / L W C
    1-12 或 JAN-DEC, - * /
    1-7 或 SUN-SAT(1是周日), - * ? / L C #

    域的取值说明

    *星号
    • 作用:表示在这个域上包含所有合法的值。

      例如在月份域上使用了星号,表示所有月份都会触发

    • 示例:0 * 17 * * ?,表示每月、每天的17:00至17:59分,每分钟都会触发一次

    ?问号
    • 作用:“我不关心这个域上是什么值”,它不同于星号:

      • 星号表示这个域上所有合法值
      • 问号表示不给这个域指定值
    • 注意:只能用在日和周域上,但不能在这两个域上同时使用

      不能同时这两个域上指定值的理由是难以解释甚至是难以理解的。

      基本上,假定同时指定值的话,意义就会变得含混不清了:考虑一下,如果一个表达式在日域上有值11,同时在周域上指定了 WED。那么是要仅在每个月11号,且正好又是星期三那天被激发?还是在每个星期三的11号被激发呢?要去除这种不明确性的办法就是不能同时在这两个域上指定值。

      只要记住,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。

    • 示例:0 10 14 ? 3 3,表示3月每个星期2的14:10:00触发一次

    ,逗号
    • 作用:逗号表示给这个域指定一个值列表,即指定多个值

      例如在秒域上使用值0,15,30,45 表示每15秒触发一次

    • 示例:0 0,15,30,45 * * * ? 表示每天都会每15分钟触发一次

    /斜杠
    • 作用:用于时间递增。刚刚我们用逗号实现15秒触发一次,也可以写成0/15
    • 示例:0 0/15 * * * ?表示每天都会每15分钟触发一次
    -横杠
    • 作用:用于指定时间范围。

      例如在小时域上指定值8-18,表示8点至18点

    • 注意:范围必须是从小到大,不能回转。即不能写成18-8

    • 示例:0 0 8-18 * * ?表示每天8:00至18:00

    #井号
    • 作用:用于指定第几个周几。
    • 注意:仅用于周域中
    • 示例:
      • 6#3表示第3个周五(6在周里表示周五,因为周日是第一天、值是1)
      • 2#1表示第1个周一
      • 0 0 8 ? 6 1#3 表示每年的6月第3个星期日上午8点(父亲节)
    L字母
    • 作用:表示某域上允许的最后一个值
    • 注意:
      • 只允许用在日域和周域上
      • 不要让范围和列表值与L连用,会产生不可预知的结果
    • 示例:
      • 用在日域上时,表示的是月域的最后一天。0 0 8 L * ?表示每月最后一天的8:00触发
      • 用在周域上时,在L前加数字X,表示最后一个星期X。0 0 8 ? * 2L表示每月最后一个周一8:00触发
    W字母
    • 作用:表示工作日(平日,周一至周五),只能用在日域上,将在离指定日期最近的一个工作日触发。
    • 示例:0 0 8 2W * ?表示每月 如果2号是工作日,则2号触发;如果2号不是工作日,则找2号最近的工作日触发
    • 注意:找寻最近的工作日时,不会跨月
  • 相关阅读:
    线程池简单介绍
    快解析结合泛微OA
    Labelme安装以及使用教程
    1688阿里巴巴官方api数据接口采集店铺的所有商品详情店铺管理接入演示案例
    Maven—POM简介
    CMS垃圾收集
    网络编程基础与套接字
    翻转单词序列、按之字形顺序打印二叉树、二叉搜索树的第k个节点
    java计算机毕业设计游泳馆信息管理系统源码+数据库+系统+部署+lw文档
    海量数据处理利器 Roaring BitMap 原理介绍
  • 原文地址:https://blog.csdn.net/qq_45881167/article/details/126185187