博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
quartz多任务调度+spring 实现
阅读量:5336 次
发布时间:2019-06-15

本文共 3618 字,大约阅读时间需要 12 分钟。

一.Quartz的学习简述

  客官,不要急,请看完下面的内容...

  代码可以直接拷贝使用,本文是编写2个定时方法来实现的,如果想要执行1个,删除另1个即可。但是想要知道执行原理请看最后的原理分析

二.执行任务类

1 package com.quartz; 2  3 import java.util.Date; 4  5 /** 6 *className   : QuartzTest 7 *description : 定时任务test 8 *@date       : 2017年12月5日 9 */10 public class QuartzTest {11      //要执行的方法112     public void run1(){13         System.out.println("我是定时任务。。。111。。。run1。。。"+new Date());14     }15      //要执行的方法216     public void run2(){17         System.out.println("我是定时任务。。。112。。。run2。。。"+new Date());18     }19 }

 

三.quartz的配置文件

1 
2
19 20
qutarz定时任务
21 22
23
24 25
26
27
28
29
30
31
32
33
34
35 36
37
38
39
40
41
42 43
44
45
46
49
50
51 52
53
54
55
56
57
58
59
60
61

四.Quartz中时间表达式的设置-----corn表达式

   各位看官在这个地方不要急,花个10分钟时间就可以把这个表达式学好,一定能写出你想要的时间

  1. 表达式介绍

       秒       分      时     日     月     周     年

     必须   必须   必须  必须  必须  必须    非必

  2.关键字说明

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

      例:在分钟域上使用星号意味着每个月都会触发这个定时任务。

        0 * 17 * * ?         // 每天下午17时的每分钟都会触发这个定时任务

    ? 问号: 只能用在日和周域上但是不能在这两个域上同时使用。

      例:假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个,如果不指定,日为*,周为?即可

        0 10,44 14 ? 3 WED      // 在三月中的每个星期三的下午 2:10 和 下午 2:44 被触发。

    , 逗号:是用来在给某个域上的值指定一个可选值列表

      例:例如,使用值 0,15,30,45 在秒域上意味着每15秒触发一个定时任务

        0 0,15,30,45 * * * ?     // 每刻钟触发一次定时任务

    / 斜杠用于时间表的递增的

      例:斜杠在左边的值是指开始的时间,斜杠右边是步长,也就是从哪个时间开始,多少的步长执行这个定时任务

        0/15 0/30 * * * ?      // 在整点和半点时每15秒触发

    - 中划线:用于指定一个范围

      例:在小时域上的 3-8 意味着 "3,4,5,6,7 8 点,但是不能反过来写!!!

        0 45 3-8 ? * *       // 在上午的3点至上午的8点的45分时触发

    L 字母:说明了某域上允许的最后一个值,它仅被日和周域支持(这个分为2种情况)

      1.当用在日域上,表示的是在月域上指定的月份的最后一天。

       例: 

        0 0 8 L * ?        // 每个月最后一天的上午 8:00 触发

      2.当用在周域上,指示着周的最后一天,就是星期六 (或者数字7)

       例:

        0 59 23 ? * L      // 在每个月的最后一个星期六下午的 11:59 触发

  3.列举表达式

    1.每分钟触发的

      0 0/1 * * * ?

    2.每天触发

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

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

    3.每月最后一天触发

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

      每隔5秒执行一次:*/5 * * * * ?

                 每隔1分钟执行一次:0 */1 * * * ?

 

                 每天23点执行一次:0 0 23 * * ?

 

                 每天凌晨1点执行一次:0 0 1 * * ?

 

                 每月1号凌晨1点执行一次:0 0 1 1 * ?

 

                 每月最后一天23点执行一次:0 0 23 L * ?

 

                 每周星期天凌晨1点实行一次:0 0 1 ? * L

 

                 在26分、29分、33分执行一次:0 26,29,33 * * * ?

 

                 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

 

  4.保留字符

    # 井号仅能用于周域中

    W 字母代表着平日 (Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日。

 五.原理及分析

 1.整个配件的介绍

  Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。

  1、Job
    表示一个工作类,类中有具体的执行方法。
    void execute(JobExecutionContext context)
 
  2、JobDetail
    JobDetail表示一个具体的可执行的调度程序(方法)。
 
  3、Trigger代表一个调度参数的配置,什么时候去调。
 
  4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。

六.Quartz的工作执行流程

    scheduler是一个计划调度器容器(总部),容器中有一个线程池,用来并行调度执行每个作业,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。 

 

七. 需要说明的地方

  在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法仍然是普通类。很显然,第二种方式远比第一种方式来的灵活,以上方法就是按第二种方法来实现的。

  由于能力水平有限,没有讲清楚的地方,请各位看官批评指正!!!

转载于:https://www.cnblogs.com/MrRightZhao/p/7986727.html

你可能感兴趣的文章
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
单例模式的几种实现方式及对比
查看>>
邓白氏编码 申请
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>
session和xsrf
查看>>
跟随大神实现简单的Vue框架
查看>>
Linux目录结构
查看>>
LeetCode-Strobogrammatic Number
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
五一 DAY 4
查看>>
(转)接口测试用例设计(详细干货)
查看>>
【译】SSH隧道:本地和远程端口转发
查看>>