在tomcat中可以方便的使用该框架完成你想要的任务调度。
Quartz的几个核心的接口和类:
接口:Job,SchedulerFactory
类:JobDetail,CronExpression,CronTrigger
时间调度表达式CronExpression说明:
表达式是由6个必需的字段和一个可选字段空格分隔
[second minute hour Day-of-month month Day-of-Week [year]]
?: 特定值
*: 所有值, 每(分/时/秒)
L: 每周最后一天(周六), 每月最后一天(1月31号|2月28号)
,: 列表
#: 每月第几周
-: 范围
/: 间隔
W: 最接近的周一到周五.如果15W是周六,则会在周六前一天周五执行, 如果15W是周日,则在下周一执行,如果15W是周二,则在周二执行, 如果1W是周六, 因为周六是上个月的周,因此会在下周一执行.
字段取值范围
字段 取值范围 可使用特殊字符
Seconds 0-59 , - * /
Minutes 0-59 , - * /
Hours 0-23 , - * /
Day-of-month 1-31 , - * ? / L W
Month 1-12 or JAN-DEC , - * /
Day-of-Week 1-7 or SUN-SAT , - * ? / L #
Year (Optional) empty, 1970-2199 , - * /
实现Job接口
public class PrintInJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException {
Logger log = Logger.getLogger("quartzLog");
String message = new Date().toString();
log.info(message);
}
}
实现javax.servlet.ServletContextListener接口,初始化调度任务
public class JobListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent sce) {
}
public void contextInitialized(ServletContextEvent sce){
String cronStr = "0-29/5,30-59/8 * * * * ?";
try {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail("printname", "printGroup", PrintInJob.class);
CronExpression cronExp = new CronExpression(cronStr);
CronTrigger cronTrigger = new CronTrigger("trigger1", "group1");
cronTrigger.setCronExpression(cronExp);
sched.scheduleJob(jobDetail, cronTrigger);
sched.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
web.xml中添加监听
<listener>
<listener-class>com.xsr.job.JobListener</listener-class>
</listener>