Quartz的学习(一)——基本使用

  • Post author:
  • Post category:其他


一、Quartz是什么?

  1. Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。
  2. 在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作
  3. 任务调度涉及多线程并发、线程池维护、运行时间规则解析、运行现场的保护以恢复等方面
  4. Quartz框架是一个开源的企业级任务调度服务,已经被作为任务调度的良好解决方案

Quartz对任务调度进行了高度抽象,提出了3个核心概念,并在


org.quartz


包中通过接口和类进行了描述

核心概念:



  • 任务


    :就是执行的工作内容。Quartz提供

    Job


    接口

    来支持任务定义


  • 触发器


    (




    何时触发的规则


    )


    :定义触发Job执行的时间

    触发规则

    。Quartz提供


    Trigger


    类及其子类支持触发器功能


  • 调度器


    :Quartz提供了

    Scheduler

    接口,将

    工作任务和触发器绑定,保证任务可以在正确的时间执行

二、入门程序

①创建maven工程,导入依赖

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

一个最简单的应用包含两个类:

HelloJob.java   任务类,需要实现 job 接口,里面实现了你想要 定时执行的方法

SimpleExample.java 主线程,用于任务的调度,执行等操作

②HelloJob.java

public class HelloJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 输出 HelloWorld !
        System.out.println("Hello World! - " + new Date());
    }
}

任务很简单,HelloJob 实现了Quartz 的Job接口中的execute方法,任务的内容就是打印一行字。具体这个任务应该何时去执行,都在SimpleExample.java里面去定义实现。

③SimpleExample.java


public class SimpleExample {

    public static void main(String[] args) throws Exception {

        // 创建一个任务
        JobDetail job = new JobDetailImpl("HelloJob", "group1", HelloJob.class);

        // 创建一个触发器
        SimpleTrigger simTrig = new SimpleTriggerImpl("trigRemindJob",SimpleTrigger.REPEAT_INDEFINITELY,3000);

        // 创建调度者工厂
        SchedulerFactory sfc = new StdSchedulerFactory();

        // 创建一个调度者
        Scheduler sched = sfc.getScheduler();

        // 注册并进行调度
        sched.scheduleJob(job, simTrig);

        // 启动调度
        sched.start();
        // sleep10s
        Thread.sleep(10000);
        // 关闭调度
        sched.shutdown();
    }
}

运行结果

核心接口

  1. Scheduler
  2. Job
  3. JobDetail
  4. Trigger
  5. JobDataMap 传输数据

三、CronTrigger

CronTrigger是Trigger的子类

CronTrigger和SimpleTrigger的对比

CronTrigger允许用户更精准地控制任务的运行日期和时间,而不仅仅是定义工作的频度

CronTrigger通过Cron表达式定义准确的运行时间点。创建CronTrigger的语法如下:

创建CronTrigger的语法很简单,最关键的是Cron表达式的编写

要使用CronTrigger,必须掌握Cron表达式

Cron表达式由6~7个由空格分隔的时间元素组成。第7个元素可选

Cron表达式的每个字段,都可以显式地规定一个值(如49)、一个范围(如1-6)、一个列表(如1,3,5)或者一个通配符(如*)

Cron表达式有几个特殊的字符,说明如下







”:中划线,表示一个范围   1-10

“ , ”:使用逗号间隔的数据,表示一个列表  1,8,10

“ * ”:表示每一个值,它可以用于所有字段。例如:在小时字段表示每小时  *

“ ? ”:该字符仅用于“月份中的哪一天”字段和“星期几”字段,表示不指定值

“ / ”:通常表示为x/y,x为起始值,y表示值的增量。

“ L ”:表示最后一天,仅在日期和星期字段中使用

“ # ”:只能用于“星期几”字段,表示这个月的第几个周几。例如:“6#3”指这个月第三个周五

不太会使用的话,可以使用在线插件:

http://cron.qqe2.com/

测试:

public static void main(String[] args) throws SchedulerException, InterruptedException, ParseException {
		// 创建一个任务
		JobDetail job = new JobDetailImpl("HelloJob", "group1", HelloJob.class);
				
		// 创建Cron触发器
		CronTrigger cronTrig = new CronTriggerImpl("HelloJob", "group1", "1/3 * * * * ?");
		// 创建调度者工厂
		SchedulerFactory sfc = new StdSchedulerFactory();
		// 创建一个调度者
		Scheduler sched = sfc.getScheduler();
		// 注册并进行调度
		sched.scheduleJob(job, cronTrig);
		// 启动调度
		sched.start();
		// sleep10s
		Thread.sleep(10000);
		// 关闭调度
		sched.shutdown();
	}



版权声明:本文为qq_41061437原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。