Quartz入门

来源:互联网 发布:linux 存放.rpm的目录 编辑:程序博客网 时间:2024/05/17 12:03

思考一个问题

现在有一个需求,需要每天在零点定时执行一些操作,让我实现的话,我会这么做:

    public void run(){        //获取当前时间        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:MM:SS");        Calendar calendar = new GregorianCalendar(2017,9,28,0,0,0);        Date today = new Date(calendar.getTimeInMillis());        //不断循环,判断时间        while(true){            Date now = new Date();            if(now.equals(today)){                //TODO 时间到,执行相关代码                calendar.add(Calendar.DAY_OF_MONTH, 1);                today = new Date(calendar.getTimeInMillis());            }        }    }

但是,有没有已经开源的,封装好的,功能强大的定时任务呢?答案是有的,那就是Quartz.

Quartz的简单介绍

Quartz 是一种功能丰富的,开放源码的作业调度库,可以在几乎任何Java应用程序集成,从最小的独立的应用程序到规模最大电子商务系统。Quartz可以用来创建简单或复杂的日程安排执行几十,几百,甚至是十万的作业数,作业被定义为标准的Java组件,可以执行几乎任何东西,可以编程让它们执行。 Quartz调度包括许多企业级功能,如JTA事务和集群支持。

Quartz 是可自由使用,使用Apache 2.0 license授权方式。

如果应用程序需要在给定时间执行任务,或者如果系统有连续维护作业,那么Quartz是理想的解决方案。

使用Quartz作业调度应用的示例:

  • 驱动处理工作流程:作为一个新的订单被初始化放置,调度作业到在正好两个小时内,它将检查订单的状态,如果订单确认消息尚未收到命令触发警告通知,以及改变订单的状态为“等待的干预”。
  • 系统维护:调度工作给数据库的内容,每个工作日(节假日除外平日)在11:30 PM转储到一个XML文件中。
  • 在应用程序内提供提醒服务。

如何使用Quartz

实现Job

Quartz作业定义要运行什么?

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class HelloJob implements Job{    public void execute(JobExecutionContext context)    throws JobExecutionException {        System.out.println("Hello Quartz!");        }}

Quartz触发器

  • SimpleTrigger – 允许设置开始时间,结束时间,重复间隔。
    SimpleTrigger – 每5秒运行。
    Trigger trigger = TriggerBuilder    .newTrigger()    .withIdentity("dummyTriggerName", "group1")    .withSchedule(        SimpleScheduleBuilder.simpleSchedule()        .withIntervalInSeconds(5).repeatForever())    .build();
  • CronTrigger – 允许UNIX cron表达式来指定日期和时间来运行作业。
    CronTrigger – 每5秒运行。
    Trigger trigger = TriggerBuilder    .newTrigger()    .withIdentity("dummyTriggerName", "group1")    .withSchedule(        CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))    .build();

Scheduler

调度类链接“工作”和“触发器”到一起,并执行它。

        Scheduler scheduler = new StdSchedulerFactory().getScheduler();        scheduler.start();        scheduler.scheduleJob(job, trigger);

练习代码地址:https://github.com/wayss000/PracticeCode/tree/master/quartzdemo/helloworld

Quartz的高级特点

  1. 作业调度
  2. 作业执行
  3. 作业持久性
  4. 事务
  5. 集群
  6. 监听器和插件

最后

最后附上学习Quartz思维导图
这里写图片描述

参考资料:
Quartz教程:http://www.yiibai.com/quartz/
慕课网视频:http://www.imooc.com/learn/846

原创粉丝点击