quartz是一个任务调度框架,它可以设置在任意时间有规律的做一些事情。比如每隔一个小时记录一次日志,每周三统计一次等等。
作者使用的是quartz-all-1.6.5.jar版本的。其实它就三点要素,第一,时间调度器(Scheduler);第二,程序触发点(Trigger&SimpleTrigger)即该程序什么时候开始执行,怎么执行;第三,程序执行任务(JobDetail & Job)即到了这个时间点,程序要执行的内容是什么;
一、web.xml配置
初始化quartz使得该程序在项目启动时触发。
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
<listener-class>com.sheca.eausp.common.util.QuartzTest</listener-class>
</listener>
二、使该quartz实现ServletContextListener容器接口
package com.sheca.eausp.common.util;
import java.util.Date;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzTest implements ServletContextListener{
private static Logger logger = Logger.getLogger(CacheTime.class);
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
//创建scheduler
logger.info("cache scheduler begin...");
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail jobDetail = new JobDetail("updateCache", "group",
MyQuartz.class);//创建任务,真正的逻辑在MyQuartz中
SimpleTrigger trigger = new SimpleTrigger("triggerName",
"group");//创建简单程序触发器
trigger.setStartTime(new Date());//开始运行时间
trigger.setRepeatInterval(3*60*1000);//运行间隔单位为毫秒
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);//程序重复次数
scheduler.scheduleJob(jobDetail, trigger);//将程序触发器和任务加入程序调度器
if (scheduler.isShutdown()) {
scheduler.start();
}
}catch (Exception e) {
logger.error("Exception is : ", e);
}
}
}
三、任务执行逻辑
任务执行类需要实现Job接口
package com.sheca.eausp.common.util;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class CacheQuartz implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("每隔三分钟执行一次该方法..");
}
}
推荐博客:https://www.cnblogs.com/drift-ice/p/3817269.html