定时调度Quartz框架学习小demo

  • Post author:
  • Post category:其他



Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.2.1。不过我之前在网上下载的是1.8.6版本,所以本文中的例子就采用1.8.6来实现。





工程结构目录图如下:



1.导入相关jar包。主要有quartz的核心包quartz-all-1.8.6.jar,还有log4j的相关jar包。



2.实现一个可以被调度的作业Job.创建一个测试作业TestJob类,实现Job接口,实现接口的execute()方法。




package com.lee;

import java.util.Date;

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

public class TestJob implements Job {

	private boolean isRunning = false;
	public void execute(JobExecutionContext context) throws JobExecutionException {
 		if(!isRunning){
			
			System.out.println(new Date()+"  作业开始被调度.....");
			
			for (int i = 1; i <= 100; i++) {
				
				System.out.println("  作业完成"+i+"%");
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			System.out.println(new Date()+"  作业被调度完成.");
			
		}else {
			System.out.println(new Date()+"  作业退出");
		}
	}

}


3.使用工厂创建调度器实例,用2中的作业创建JobDetail实例,创建触发器trigger,然后用调度器把作业和trigger关联起来,最后调用开始调度的方法。


package com.lee;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class MyQuartzServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyQuartzServer server = new MyQuartzServer();
		
		try {
			server.startScheduale();
		} catch (SchedulerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private void startScheduale()throws SchedulerException{
		//1.使用工厂创建调度器实例
		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		
		//2.以作业创建JobDetail实例
		JobDetail jobDetail = new JobDetail("dd",Scheduler.DEFAULT_GROUP,TestJob.class);
		
		//3.创建trigger,创建一个简单的调度器
		//指定该任务呗重复调度50次,每次间隔20秒
		Trigger trigger = new SimpleTrigger("dd",Scheduler.DEFAULT_GROUP, 50, 20000);
		
		//4.调度器将作业与trigger关联起来
		scheduler.scheduleJob(jobDetail, trigger);
		
		//5.开始调度
		scheduler.start();
		
		
		
	}
	
	
}


Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于


多线程


的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能


并发运行


多个作业的原理。Quartz依赖一套松耦合的


线程池


管理部件来管理线程环境。(引用自百度百科)



如果有什么好的建议,欢迎留言。谢谢。







版权声明:本文为asskiller原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。