quartz初识

Job实现类

package quartz.helloQuartz;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.Trigger;

/**
 * Created by penelope on 2017/7/3.
 */
public class FirstJob implements Job {
	
	private String jobMsg;
	private String trMsg;
	private Double trDouble;

	public String getJobMsg() {
		return jobMsg;
	}

	public void setJobMsg(String jobMsg) {
		this.jobMsg = jobMsg;
	}

	public String getTrMsg() {
		return trMsg;
	}

	public void setTrMsg(String trMsg) {
		this.trMsg = trMsg;
	}

	public Double getTrDouble() {
		return trDouble;
	}

	public void setTrDouble(Double trDouble) {
		this.trDouble = trDouble;
	}

	public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
		Calendar calendar = java.util.Calendar.getInstance();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("Current time is: " + dateFormat.format(calendar.getTime()));
		
		
		/**
		 * 当 Job 触发器触发时(在某个时刻),execute(..)就被 scheduler所调用。
		 * JobExecutionContext 对象被传递给这个方法,它为 Job 实例提供了它的“运行时”环境:
		 * 1, 一个指向执行这个 Job 实例的 Scheduler 句柄,
		 * 2, 一个指向触发该次执行的触发器的句柄,
		 * 3, Job 的 JobDetail 对象以及一些其余的条目。
		 */
		
		// 从jobExecutionContext中获取Scheduler.
		@SuppressWarnings("unused")
		Scheduler scheduler = jobExecutionContext.getScheduler();
		
		//从jobExecutionContext中获取JobDetail和Trigger
		JobDetail jobDetail = jobExecutionContext.getJobDetail();
		System.out.println("job name and group are: " + jobDetail.getKey().getName() + ": " + jobDetail.getKey().getGroup());
		
		Trigger trigger = jobExecutionContext.getTrigger();
		System.out.println("trigger name and group are:" + trigger.getKey().getName() + ":" + trigger.getKey().getGroup());
		
		/**
		 * 方法一:从JobDataMap中获取JobDetail和Trigger的data
		 */
/*
		JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
		JobDataMap trDataMap = jobExecutionContext.getTrigger().getJobDataMap();
		
		String jobMsg = jobDataMap.getString("jobMsg");
		String trMsg = trDataMap.getString("trMsg");
		Double tDouble = trDataMap.getDouble("trDouble");
		
		System.out.println("jobMsg------- : " + jobMsg );
		System.out.println("trMsg------- : " + trMsg );
		System.out.println("tDouble------- : " + trDouble );
*/
		
		/**
		 * 方法二:Job类中添加JobDataMap中对应的属性和setter方法。Job类中的属性名称要和JobDataMap中的key值一致。
		 */
//		JobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap();
		System.out.println("jobMsg------- : " + jobMsg );
		System.out.println("trMsg------- : " + trMsg );
		System.out.println("trDouble------- : " + trDouble );
		System.out.println("==========================================================");
		
	}

}

Quartz客户端代码:

package quartz.helloQuartz;

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;

/**
 * Created by penelope on 2017/7/3.
 */
public class FirstScheduler {
	public static void main(String[] args) throws SchedulerException {

		JobDetail jobDetail = JobBuilder.newJob(FirstJob.class)//获取JobDetail实例,并绑定FisrtJob类
				.withIdentity("myJob", "group1")//定义Job的名称和组别
				.usingJobData("jobMsg", "this is jobDetail message.")//定义jobDataMap中的数据,传递给Job实现类
				.build();

		System.out.println("jobDetail's name: " + jobDetail.getKey().getName());
		System.out.println("jobDetail's group:" + jobDetail.getKey().getGroup());
		System.out.println("jobDetail's jobClass : " + jobDetail.getJobClass().getName());

		// 建立一个Trigger实例,定义该Job当即执行,而且每隔2秒重复执行
		Trigger trigger = TriggerBuilder.newTrigger()//过去trigger实例
				.withIdentity("myTrigger", "group1")//定义trigger的名称和组别
				.usingJobData("trMsg", "this is trigger message.")//定义jobDataMap中的数据,传递给Job实现类
				.usingJobData("trDouble", 3.0)//定义jobDataMap中的数据,传递给Job实现类
				.startNow()
				.withSchedule(SimpleScheduleBuilder
						.simpleSchedule()
						.withIntervalInSeconds(2)
						.repeatForever())
				.build();

		// 建立Scheduler实例
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		Scheduler scheduler = schedulerFactory.getScheduler();
		scheduler.start();
		// 执行
		scheduler.scheduleJob(jobDetail, trigger);//将JobDetail实例传递给scheduler,实际上是把job和trigger告知scheduler.
//		scheduler.shutdown();
	}
}
相关文章
相关标签/搜索