CronTrigger 公共接口检查设置特定的CronTrigger。在给定时间触发job,定义与Unix的cron的计划定义相似。在org.quartz包
比较难以理解的是cron表达式,只有七位,分别为:
秒(0~59)
分钟(0~59)
小时(0~23)
天(月)(0~31,但是你需要考虑你月的天数)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)

年份(1970-2099)

以下log日志有用到slf4g框架记录日志信息。

实例代码:
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.yc.log.util.LoggerUtils;


public class CronTriggerExample extends LoggerUtils implements Job {
/**
*
*/
public CronTriggerExample() {
}
/*
* (non-Javadoc)
*
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
JobDetail detail = context.getJobDetail();
logger.info("cronTriggerExample says : {} executing at {}", detail
.getKey(), new Date());
}
/*
* cron 表达式只有七位 分别以:
*
* 秒(0~59)
* 分钟(0~59)
* 小时(0~23)
* 天(月)(0~31,但是你需要考虑你月的天数)
* 月(0~11)
* 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
* 年份(1970-2099)
*/
public void run() throws SchedulerException {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
// job1 每10秒钟触发一次
JobDetail jobDetail = newJob(CronTriggerExample.class).withIdentity(
"job1", "group1").build();
CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1")
.withSchedule(cronSchedule("0/10 * * * * ?")).build();
putScheduler(scheduler, jobDetail, trigger);
// job2 每2分钟的第15秒钟触发一次
jobDetail = newJob(CronTriggerExample.class).withIdentity("job2",
"group1").build();
trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(
cronSchedule("15 0/2 * * * ?")).build();
putScheduler(scheduler, jobDetail, trigger);
/*
* crom 表达式 "-"
* "_"——表示两边参数之间,例如1-5表示1到5
*/
// job3 在11-12点之间每两分钟触发一次
jobDetail = newJob(CronTriggerExample.class).withIdentity("job3",
"group1").build();
trigger = newTrigger().withIdentity("trigger3", "group1").withSchedule(
cronSchedule("0 0/2 11-12 * * ?")).build();
putScheduler(scheduler, jobDetail, trigger);
/*
* cron 表达式中"," 、 am 、pm 的用法
*
* ","——表示并的关系,例如1,5 代表 1和5.
* "am"——表示早上
* "pm"——表示下午
*/
// job4 每月中的1号和15号早上10点触发一次
jobDetail = newJob(CronTriggerExample.class).withIdentity("job4",
"group1").build();
// 为了快速测试我把这里的cron表达式改了,原本为"0 0 10am 1,15 * ?"
trigger = newTrigger().withIdentity("trigger4", "group1").withSchedule(
cronSchedule("0 0 10am 1,15 * ?")).build();
putScheduler(scheduler, jobDetail, trigger);
// job5 每周一到周五内每0秒和30秒触发一次
jobDetail = newJob(CronTriggerExample.class).withIdentity("job5",
"group1").build();
trigger = newTrigger().withIdentity("trigger5", "group1").withSchedule(
cronSchedule("0,30 * * ? * MON-FRI")).build();
putScheduler(scheduler, jobDetail, trigger);
scheduler.start();
try {
Thread.sleep(3000l * 1000l);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
scheduler.shutdown(true);
SchedulerMetaData metaData = scheduler.getMetaData();
logger.info("此次任务调度共运行{}个job 。", metaData.getNumberOfJobsExecuted());
}
private Date putScheduler(Scheduler scheduler, JobDetail jobDetail,
CronTrigger trigger) throws SchedulerException {
Date ft = scheduler.scheduleJob(jobDetail, trigger);
logger
.info(
"{} has been scheduled to run at: {} and repeat based on expression: {}",
jobDetail.getKey(), ft, trigger.getCronExpression());
return ft;
}
/**
* @param args
* @throws SchedulerException
*/
public static void main(String[] args) throws SchedulerException {
CronTriggerExample example = new CronTriggerExample();
example.run();
}
}