quartz

1.job接口只有一个方法execute(),类似于TimerTask的run方法,在里面写业务逻辑。生命周期:每次在调度器执行job时,在调用execute()前会创建新的job实例。调用完后关联的job对象会被释放,释放的资源会被垃圾回收机制回收。

2.jobDetail:为job提供许多设置属性,以及jobDatalMap成员变量,它用来存储特定的job实例的状态信息,调度器需要借助jobDetail对象来添加job实例。

    属性 name:必须的唯一标识         group:那个组的      jobClass:引入的job     jobDataMap:自定义参数。

    jobDataMap:在进行任务调度时,jobDataMap存放在jobExecutionContext方便获取;jobDataMap可以装载任何可序列化的数据对象,当job实例被执行时,这些参数对象会传递给他;jobDataMap实现了jdk的map接口,并且添加了一些方便的方法来存取基本数据类型

3.jobExecutionContext:当scheduler调用一个job时,就会将jobExecutionContext传给execute();job通过jobExecutionContext可以访问到quartz运行时的环境和job本身的明细数据。

4.trigger:quartz中的触发器用来告诉调度程序作业什么时候触发。即trigger对象是用来执行job的。simpleTrigger精确指定时间,Crontrigger每月那个时间段来调度。cron表达式。

quartz_第1张图片

    测试demo

package com.dome.HelloQuartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey;

public class HelloJob implements Job{
	//成员变量是jobDataMap的key
	private String message;
	private Float floatJobValue;
	private Double doubleJobValue;
	private String message1;
	
	public String getMessage1() {
		return message1;
	}

	public void setMessage1(String message1) {
		this.message1 = message1;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Float getFloatJobValue() {
		return floatJobValue;
	}

	public void setFloatJobValue(Float floatJobValue) {
		this.floatJobValue = floatJobValue;
	}

	public Double getDoubleJobValue() {
		return doubleJobValue;
	}

	public void setDoubleJobValue(Double doubleJobValue) {
		this.doubleJobValue = doubleJobValue;
	}

	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		Date date=new Date();
		SimpleDateFormat sf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
		System.out.println("当前时间"+sf.format(date));
		//获取到job的名字和group
		JobKey key=arg0.getJobDetail().getKey();
		System.out.println("jobDetail的名字"+key.getName()+"jobDetail的group"+key.getGroup());
		TriggerKey tkey=arg0.getTrigger().getKey();
		System.out.println("trigger的名字"+tkey.getName()+"trigger的group"+tkey.getGroup());
		//获取jobdataMap
		/*JobDataMap dataMap=arg0.getMergedJobDataMap();
		 * 获取两个的集合如果有同一个key优先获取tirgger的jobDataMap*/
		
		/*JobDataMap dataMap=arg0.getJobDetail().getJobDataMap();
		JobDataMap tdatamap=arg0.getTrigger().getJobDataMap();
		String dmessage=dataMap.getString("message");
		Float jobFalteValue=dataMap.getFloat("floatJobValue");
		String tmessage=tdatamap.getString("tmessage");
		Double doubleJobValue=tdatamap.getDouble("doubleJobValue");
		System.out.println("job:"+dmessage+jobFalteValue);
		System.out.println("trigger"+tmessage+doubleJobValue);*/
		
		//set方法进行取值
		System.out.println("message=="+message);
		System.out.println("message1=="+message1);
		System.out.println("jobFalteValue=="+floatJobValue);
		System.out.println("doubleJobValue=="+doubleJobValue);
	}

}

Scheduler

package com.dome.HelloQuartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HellowordScheduler {
	public static void main(String[] args) throws SchedulerException {
		//打印当前时间
		Date date=new Date();
		SimpleDateFormat sf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
		System.out.println("当前时间"+sf.format(date));
		//创建jobdetail实例,将此实例与HelloJob类绑定
		JobDetail jobDetail= JobBuilder.newJob(HelloJob.class)
				.withIdentity("myjob","group1")
				.usingJobData("message","hellojobdetail")
				.usingJobData("floatJobValue",3.14f).build();
		//获取当前时间的下3秒时间,间隔3秒执行一次
		date.setTime(date.getTime()+3000);
		//获取当前时间的9秒后时间,9秒后程序结束
		Date endDate=new Date();
		endDate.setTime(endDate.getTime()+8000);
		//创建trigger实例,定义该job立即执行,并且每两秒执行一次,不间断。
		Trigger trigger=TriggerBuilder.newTrigger().withIdentity("mytigger","group1")
				.usingJobData("message1","hellowtigger")
				.usingJobData("doubleJobValue",3.0d)
				.startAt(date)
				.endAt(endDate)
				.withSchedule(SimpleScheduleBuilder.simpleSchedule()
				.withIntervalInSeconds(2).repeatForever()).build();
		//创建scheduler实例
		SchedulerFactory sfact=new StdSchedulerFactory();
		Scheduler scheduler=sfact.getScheduler();
		scheduler.start();
		
		//把jobDetail和trigger放到schedular里面
		scheduler.scheduleJob(jobDetail, trigger);
	}
}

相关pom文件


  4.0.0

  com.dome
  HelloQuartz
  0.0.1-SNAPSHOT
  jar

  HelloQuartz
  http://maven.apache.org

  
    UTF-8
  

  
    
      junit
      junit
      3.8.1
      test
    
    
    
	    org.quartz-scheduler
	    quartz
	    2.3.0
	
  

你可能感兴趣的:(quartz)