quarz定时任务 & spring整合quartz

quartz定时任务 & spring整合quartz

概述

今天分享的这个技术应用场景 我就不多说了, 想想你什么时候需要闹钟就明白应用场景 , OK下面说说安装使用以及如何整合到我们的spring的中

突然想diss一下spring 虽然大家都在用可是看过它的源码的都知道 可扩展性太差了 你要使用spring就必须遵循它的一切配置 从主观意愿上来说用户是不情愿的, 从技术上我们都是各种spring整合xxx 没见过xx整合spring的 用多了难受

quartz官网


使用

  • quartz基本原理

    • 任务: 具体执行的工作
    • 触发器: 在特定时间触发任务的执行
    • 调度器: 任务的实际执行者 负责整合任务和触发器
  • 导入Maven依赖

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>1.8.6</version>
</dependency>

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 实现Job接口 在execute方法内实现自己的定时业务

  • 创建任务

    //第一个参数: 代表任务名
    //第二个参数: 对于多个任务指定一个组 也可以自定义
    JobDetail detail = new JobDetail("any", "any", MyJob.class);	
        
        
    • 1
    • 2
  • 创建触发器

  		//创建触发器
        //第一个参数: 触发器名称自定义
        //第二个参数: 触发的定时策略: 这里是重复时间间隔 3秒一次
        SimpleTrigger trigger = new SimpleTrigger(
                "myTrigger",
                SimpleTrigger.REPEAT_INDEFINITELY,
                3000
        );
        //指定触发器的开启时间
        trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 定义调度器整合任务和触发器

    
            //创建调度器工厂 拿到一个调度器
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
            //注册 任务和触发器
            scheduler.scheduleJob(job, trigger);
    
        <span class="token comment">//启动任务</span>
        scheduler<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">//scheduler.shutdown();</span><div class="hljs-button {2}" data-title="复制" data-report-click="{&quot;spm&quot;:&quot;1001.2101.3001.4259&quot;}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li></ul></pre> </li></ul> 
    

说明

上面是个小demo 有注意到一个触发器SimpleTrigger

它的使用场景: 固定时间间隔的调度任务, 可以设置任务的开始时间 结束时间 重复次数 以及时间间隔

而对于有些情况下我们需要指定时间点来执行任务 比如闹钟

这个时候需要它的子类 -------Contrigger所以更多的场景是使用这个子类触发器:

 CronTrigger trigger2 = new CronTrigger("myTirgger", "groupName", "* 12 17 ? * *");
 
 

    前两个参数和父类一样 最后一个是子类特有的cron表达式 上面的含义代表每天的17.12执行这个定时任务

    • 关于cron表达式

      位置含义范围允许的特殊字符
      10 ~ 59* /
      2分钟0 ~ 59* /
      3小时0 ~ 23* /
      41 ~ 31* / ? L
      5月份1 ~ 12 或 JAN ~ DEC* /
      6星期1 ~ 7 或 SUN ~ SAT* / ? L #
      7年份1970 ~ 2099* /

      说明

      ​ 1. 使用cron表达注意从左往右是时间是倒序的(想想英文时间的书写) 且最好有空格间隔

      ​ 2. 表达式至少要有6个元素 少于6个必然报错

      关于通配符

      • ***** : 表示每一个值 用于所有字段

      • ? : 仅用于星期表示不指定值

        • 记忆方法: 周日没有问号
      • - : 表示时间范围 范围连续

      • , : 表示一个时间点列表 不必连续

      • /: 通常表示x/y x为起始值 y代表增量 只有y=1才会连续

        需要注意: 不能同时使用?也不能同时使用 *, 否则都会报错

      • 一些列子

        cron表达式含义
        0 15 4 * * ?每天凌晨4.15启动 一次
        30 0 0 1 1 ? 20142014年1月1日0点0分30秒执行一次
        0 0 14 1,10,20 * ? *每月的1,10,20的下午2点执行一次
        0 0/5 15,17 * * ?每天的15点 到 16点 每5分钟执行一次 , 每天的17点到18点每5分钟执行一次

    spring 整合quartz

    • XML方式

      实际上就是将上面的代码注入到spring中, 怎么注入百度一下 吧我采用下面给予注解的配置 仅仅需要一个注解就能完成上面的所有代码

    • 注解方式

      @Scheduled(cron="表达式")
         
         

        这个方式属实香


      Over

      总的来说这个定时技术很好理解 使用也是方便 还在等什么赶紧加入到你的项目中 提升一个逼格吧

      • 0
        点赞
      • 0
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值