quartz(一)--概览

一、Quartz是什么?

            官方来说:quartz是一个作业调度框架。很晦涩难懂,什么是作业调度框架呢?白话来说,quartz像是一个程序的管家,咱们指定告诉它我什么时候要干什么事情,它就会按照指令,定时执行,相当于数据库中的 Job、Windows 的计划任务。(官网地址:http://www.quartz-scheduler.org/

二、简单使用

         百度一下quartz,会发现百度百科的介绍里有一句特别吸引人的话:“尽管Quartz框架整合了许多额外功能,但就其简易形式看,你会发现它易用得简直让人受不了!”它到底简单到多么令人受不了呢?

1.jar

        Quartz自己quartz.jar和依赖包commons-logging.jar 、slf4j-log4j12-1.5.10.jar 、slf4j-api-1.5.10.jar

2.创建一个类

package quartz;
import  org.quartz.CronTrigger;
import  org.quartz.Job;
import  org.quartz.JobDetail;
import  org.quartz.JobExecutionContext;
import  org.quartz.JobExecutionException;
import  org.quartz.Scheduler;
import  org.quartz.SchedulerFactory;
importorg.quartz.impl.StdSchedulerFactory;
import  java.util.Date;
 public class QuartzReport implements  Job{
     public  void  execute(JobExecutionContextcntxt)  throws  JobExecutionException   {
       System.out.println("输出:"+cntxt.getJobDetail().getJobDataMap().get("name")+newDate());
    }
     public static void  main(String[] args)   {
        try   {
           SchedulerFactory schedFact=newStdSchedulerFactory();
           Schedulersched=schedFact.getScheduler();
           sched.start();
           JobDetail jobDetail=newJobDetail("a","b",QuartzReport.class);
          jobDetail.getJobDataMap().put("name","Mango");
          
           CronTrigger trigger=new  CronTrigger("c","d");
          trigger.setCronExpression("0/1 * * * * ? " ); // 启动之后立即执行 每一秒继续重复。
           sched.scheduleJob(jobDetail,trigger);
          
       }  catch  (Exception e)   {
           e.printStackTrace();
       }
   }
}


 

直接执行,输出结果:


三、知识补充

           我们通过一个小Demo,大概知道了quartz是什么,怎么用,下面我们要补充一下quartz的其他知识。

Quartz的工作原理    

         对于一个调度作业,通常有两个因素构成:调度的内容【What】:即调度具体做什么工作,例如是发邮件、系统备份;调度的时间【when】:什么时候工作,这个又包含两个内容,开始时间【调度第一次执行的时间】,调度时间【在调度开始之后,在什么时间的时候,执行定义的调度工作】。

          Quartz框架提供了Job接口和Trigger接口来分别对应调度的内容和调度时间,由于Job接口和Trigger接口是完全分离的,彼此互不关心,他们之间要建立某种关联,就需要通过Scheduler来帮助他们建立联系。Quartz启动时,会初始化一套work线程池,这套线程被用于执行预定义的调度作业。Job和Trigger的关联根据配置的不同【基于内存的调度、基于数据库的调度】而不同:如果是基于内存的调度,那么Job信息和Trigger信息分别放到两个HashMap中,通过RAMJobSupport来建立关联;如果是基于数据库的调度,Job信息、Tirgger信息以及它们的关联信息都被存到数据库表中。

JDKTimer API的比较

       目前已有的调度框架除了Flux Scheduler, Enterprise BatchingQueuing等一些商业版本之外,还有JDK自带的Timer和TimerTask,对于商业版本不作任何评估,目前只是对能免费使用的两个常用的调度框架做一些比较:

JDK Timer/TimerTask

Quartz

每个任务一个线程

线程池

只是基于内存的调度

内存&数据库

不能支持很复杂的调度

CronTrigger可以定义复杂的调

          quartz除了基于内存的调度外,还支持基于数据库的调度。关于表达式和意义大家自己可以上网搜索。同样Java里面的好东西,.NET里面也有,quartz.NET有兴趣的朋友可以看一下。

 

四、结尾

      任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能。个人的一点经验是,在用quartz时,如果遇到设置、代码没问题但仍然报错的情况,可以清理一下缓存试试,会有帮助的。在java开发中,我们很少单独使用quartz,一般是和其他框架一起使用,比如spring啊,下篇博客我们将介绍quartzspring的整合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值