先前写过一篇使用Spring实现Quartz任务调度的范例《使用Spring实现Quartz任务调度的范例》
要是工程里不能使用spring的话,这种做法就不合适了,这种情况下可以使用Listener来实现Quartz任务调度。
QuartzServiceListener.java代码如下
package com.demo;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
public class QuartzServiceListener implements ServletContextListener {
private static Logger log = Logger.getLogger(QuartzServiceListener.class);
private static SchedulerFactory schedulerFactory = new org.quartz.impl.StdSchedulerFactory();
private static Scheduler scheduler;
@Override
public void contextDestroyed(ServletContextEvent event) {
try {
scheduler.shutdown();
log.info("停止调度任务");
} catch (SchedulerException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
}
}
@Override
public void contextInitialized(ServletContextEvent event) {
try{
scheduler = schedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail("name", Scheduler.DEFAULT_GROUP, MyJob.class);
Trigger trigger = TriggerUtils.makeDailyTrigger("[每日自动分析调度任务]", 18, 07);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
log.info(new StringBuilder("启动调度任务").append(trigger.getNextFireTime()));
}catch(Exception e){
e.printStackTrace();
log.error(e.getMessage(), e);
}
}
}
MyJob.java代码如下
package com.demo
import org.apache.log4j.Logger;
public class MyJob {
private static Logger log = Logger.getLogger(MyJob.class);
/**
* 定时执行的任务
*/
public void execute() {
log.info("准备执行调度");
try{
}finally{
log.info("调度执行完成");
}
}
}
最后别忘了在web.xml里加入这个QuartzServiceListener
web.xml
<listener>
<listener-class>com.gdw.scheduler.QuartzServiceListener</listener-class>
</listener>