Quartz学习(一)

1、下载地址:http://quartz-scheduler.org/downloads/catalog

2、quartz-2.1.5文件根目录中有很多jar包,Quartz 最核心的包就是quartz-all-2.1.5.jar,如果需要用到其他Quartz 的其他特性,可以考虑将相应的包加入到classpath中,除此之外,Quartz 还依赖一些第三方的包,那些包都放在了lib目录下,将其也全部加入到classpath中

3、在src下新建一个quartz.properties文件,该文件用来配置Quartz 的一些参数

一个简单的实例:

quartz.properties文件配置内容如下:

org.quartz.scheduler.instanceName: QuartzTest
org.quartz.threadPool.threadCount: 3
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

log4j.properties配置内容如下:

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

QuartzTest.java

package demo01;

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.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 每隔2秒调用一次job
 * 功能:TODO
 * 类名:QuartzTest
 * 作者:smile
 * 时间:Aug 11, 2012:3:25:46 PM
 */
public class QuartzTest {

	public static void main(String[] args) {
		new QuartzTest().run();
	}

	public void run() {
		try {
			
			//Scheduler instances are produced by a SchedulerFactory
			SchedulerFactory sf = new StdSchedulerFactory();
			Scheduler scheduler = sf.getScheduler();

			//JobDetail Conveys the detail properties of a given Job instance. JobDetails are to be created/defined with JobBuilder. 
			//JobBuilder无构造函数,所以只能通过JobBuilder的静态方法newJob(Class<? extends Job> jobClass)生成JobBuilder实例
			//withIdentity(String name,String group)参数用来定义jobKey,如果不设置,也会自动生成一个独一无二的jobKey用来区分不同的job
			//build()方法 Produce the JobDetail instance defined by this JobBuilder.
			JobDetail job = JobBuilder.newJob(JobTest.class).withIdentity("job1", "group1").build();

			//use TriggerBuilder to instantiate an actual Trigger
			//withIdentity(String name,String group)参数用来定义TriggerKey,如果不设置,也会自动生成一个独一无二的TriggerKey用来区分不同的trigger
			Trigger trigger = TriggerBuilder.newTrigger().withIdentity(new TriggerKey("trigger1", "group1")).startNow()
							.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
							.build();

			// Tell quartz to schedule the job using our trigger
			scheduler.scheduleJob(job, trigger);
			
			// Start up the scheduler
			scheduler.start();
			
			//当前主线程睡眠2秒
			System.out.println(Thread.currentThread().getName());
			Thread.sleep(30*1000);
			
			// shut down the scheduler
 			scheduler.shutdown(true);

		} catch (SchedulerException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} 
	}

}

JobTest.java

package demo01;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobTest implements Job{
	
	//Instances of Job must have a public no-argument constructor
	public JobTest(){
		
	}
	
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		
		//看打印出的当前对象每次都不一样,就等于每次执行一次任务都新建一个job实例
		System.out.println("我的任务就是调用当前Job:"+this+"不断刷屏!!!");
	}

}

控制台打印的结果:

2012-08-11 08:34:15,512 INFO [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler 'QuartzTest' initialized from default resource file in Quartz package: 'quartz.properties'
2012-08-11 08:34:15,512 INFO [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler version: 2.1.5
2012-08-11 08:34:15,527 INFO [org.quartz.core.QuartzScheduler] - Scheduler QuartzTest_$_NON_CLUSTERED started.
main
我的任务就是调用当前Job:demo01.JobTest@1c672d0不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@1855af5不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@198dfaf不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@1858610不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@12498b5不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@1a5ab41不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@18e3e60不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@1a125f0不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@c1cd1f不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@181afa3不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@131f71a不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@15601ea不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@197d257不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@7259da不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@16930e2不断刷屏!!!
我的任务就是调用当前Job:demo01.JobTest@1add2dd不断刷屏!!!
2012-08-11 08:34:45,538 INFO [org.quartz.core.QuartzScheduler] - Scheduler QuartzTest_$_NON_CLUSTERED shutting down.
2012-08-11 08:34:45,538 INFO [org.quartz.core.QuartzScheduler] - Scheduler QuartzTest_$_NON_CLUSTERED paused.
2012-08-11 08:34:46,023 INFO [org.quartz.core.QuartzScheduler] - Scheduler QuartzTest_$_NON_CLUSTERED shutdown complete.

猜你喜欢

转载自luan.iteye.com/blog/1629148