Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。
一、核心概念
Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context)
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger代表一个调度参数的配置,什么时候去调。
4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
二、一个最简单入门实例
1、任务类:
package com.xxyd.quartz.myself;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 任务类
* @author dove
*
*/
public class TimeTask
{
public void tellTime()
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("北京时间:"+sdf.format(new Date()));
}
}
2、任务调度类
package com.xxyd.quartz.myself;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 任务调度类
* @author dove
*
*/
public class TimeJob implements Job
{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException
{
TimeTask timeTask = new TimeTask();
timeTask.tellTime();
}
}
3、任务注册及启动
package com.xxyd.quartz.myself;
import java.text.ParseException;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
/**
* 任务调度测试类
* @author dove
*
*/
public class TimeJobTest
{
public static void main(String[] args) throws ParseException, SchedulerException
{
startJob();
}
public static void startJob() throws SchedulerException, ParseException
{
TimeJob timeJob = new TimeJob();
//1、创建JobDetial对象,并为它设置名称,组名称,及执行任务的类
JobDetail jobDetail = new JobDetail("job1", "jobGroup", timeJob.getClass());
//2创建触发器对象,并为它设置名称,组名称,及任务调度的时间参数
CronTrigger cronTrigger = new CronTrigger("trigger1", "triggerGroup");
cronTrigger.setCronExpression("0/5 * * * * ?");
//3、创建Scheduler对象,并配置JobDetail和Trigger对象
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
//4、启动触发器,这是必不可少的的步骤
if(!scheduler.isShutdown())
{
scheduler.start();
}
}
}