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依赖一套松耦合的
线程池
管理部件来管理线程环境。(引用自百度百科)
如果有什么好的建议,欢迎留言。谢谢。