Quartz初学

简单介绍:

          Quartz 是一个用来实现作业调度(Job Scheduler)的工具,官网介绍说你可使用 quartz scheduler创建并执行 简单或复杂的成千上万的 JOBS。并且Quartz包括很多企业级的特性,例如 支持JTA transcations 和 分布式集群。

主要类:

       1)  interface Job  接口Job是你定义的所有job都会实现的接口,Job接口定义 如下

void execute(JobExecutionContext context) throws  JobExecutionException;

        

        我们可以在execute中来实现我们JOB要实现的功能 JobExecutionContext在quartz中扮演一个上下文的角色,就行servlet中的ServletContext。同过context我们可以获得这个job的配置信息和在执行中传递的参数。例如我定义一个MyJob 类 执行一次就打印 “吸烟有害健康”。

public class MyJob implements Job {
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		System.out.println("吸烟有害健康");
	}

}


      2)interface jobDetail Jobdetail是对job的一个包装,唯一的实现类是JobDetailImpl,使用它可以定义一个job的名字和组名。但一般我们不直接创建jobDetail,一般使用Jobbuilder去创建jobDetail创建方法如下

JobDetail job=JobBuilder.newJob(MyJob.class)
				.withIdentity("myjob","mygroup")
				.build();

通过jobBuilder创建好JobDetail后我们自己定义的MyJob就和jobDetail关联上了。

内部实现很简单就是在JobBuilder创建jobDetail时设置的属性传递到joibDetail属性上,例如newJob(Class<? extends Job>)方法的定义

public static JobBuilder newJob(Class <? extends Job> jobClass) {
        JobBuilder b = new JobBuilder();
        b.ofType(jobClass);
        return b;
    }
  public JobBuilder ofType(Class <? extends Job> jobClazz) {
        this.jobClass = jobClazz;
        return this;
    }

把我们的MyJob.class赋值到this.jobClass. winthIdentity(String jobname,String grouname)方法定义如下

 public JobBuilder withIdentity(String name, String group) {
        key = new JobKey(name, group);
        return this;
    }


JobKey维护了JobName和GroupName这两个属性,JobKey代码为

public final class JobKey extends Key<JobKey> {

    private static final long serialVersionUID = -6073883950062574010L;
    
    public JobKey(String name) {
        super(name, null);
    }

    public JobKey(String name, String group) {
        super(name, group);
    }

    public static JobKey jobKey(String name) {
        return new JobKey(name, null);
    }
    
    public static JobKey jobKey(String name, String group) {
        return new JobKey(name, group);
    }

}


在build()方法中将这些参数传递到JobDetail中

 public JobDetail build() {

        JobDetailImpl job = new JobDetailImpl();
        
        job.setJobClass(jobClass);
        job.setDescription(description);
        if(key == null)
            key = new JobKey(Key.createUniqueName(null), null);
        job.setKey(key); 
        job.setDurability(durability);
        job.setRequestsRecovery(shouldRecover);
        
        
        if(!jobDataMap.isEmpty())
            job.setJobDataMap(jobDataMap);
        
        return job;
    }

JobDetail.setKey的实现如下

   public void setKey(JobKey key) {
        if(key == null)
            throw new IllegalArgumentException("Key cannot be null!");

        setName(key.getName());
        setGroup(key.getGroup());
        this.key = key;
    }

      3)interface Trigger Trigger是触发器每一个触发器都可以控制一个JOB的执行,Tigger的实现类有很多这里使用SimpleTrigger,使用方式如下

 Trigger trigger=newTrigger()
	    		.withIdentity("myTrgger","mygroup")
	    		.startAt(date)
	    		.build();

myTrgger是触发器的名字,mygroup是组名和你想要控制的job放到一个组里就可以了。
date参数可以这样获得,意思是在下一个整秒的日期

Date date=DateBuilder.evenSecondDate(new Date());

Trigger是一个控制job执行的控制器, trigger里有很多设置,通过这些设置可以实现我们要的基本所有的功能。这里startAt()设置执行Job的时间。

      4)interface SchedulerFactory 的实现类有两个分别是 StdSchedulerFactory 和DirectSchedulerFactory 我使用的是第一个。这个类可以生产Scheduler

          SchedulerFactory sf=new StdSchedulerFactory();

      5) interface Scheduler  Scheduler 接口是我们的调度器管理所有的Job和trgger的。

          首先要获得一个Scheduler对象

          Scheduler  scheduler=sf.getScheduler();

          管理Job

          scheduler.scheduleJob(job,trigger);

这样就可以使用了

启动:scheduler.start();

结束:scheduler.shutdown(true);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成风破浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值