版权声明:本文为博主原创文章,未经博主允许不得转载。你想转载请附加连接哦 https://blog.csdn.net/dmw412724/article/details/83987896
quartz把定时任务抽取出三个概念:工作/触发器/调度器,即job/trigger/scheduler。
1.
其中job很简单,直接实现Job即可。
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException{}
JobExecutionContext 一般用作:scheduler设置任务时可以设置参数传到job里。
2.
Trigger有两个基本的实现:
SimpleTrigger,CronTrigger
SimpleTrigger即是简单的触发器,比如间隔30分钟触发,间隔20秒触发。
CronTrigger是根据日历的复杂触发了。比如每个月1号12点触发,因为每个月的天数不一样,所以这样的需求使用SimpleTrigger是不行的。
3.全部使用举个例子:这个例子放到了web.xml里的lisenner里了。
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzListener implements ServletContextListener {
private static Logger log = Logger.getLogger(QuartzListener.class);
private Scheduler scheduler;
{
try {
scheduler = new StdSchedulerFactory().getScheduler();
if (log.isInfoEnabled()){
log.info("quartz启动");
}
} catch (SchedulerException e) {
}
}
@Override
public void contextDestroyed(ServletContextEvent se) {
try {
scheduler.shutdown();
if (log.isInfoEnabled()){
log.info("quartz关闭");
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Override
public void contextInitialized(ServletContextEvent se) {
/**
* 第一个工作CleanOrderJob实现了Job
*/
JobDetail cleanOrderJob =
JobBuilder.newJob(CleanOrderJob.class)
.withIdentity("CleanOrderJob")
.build();
/**
* 第二个工作CleanQrJob实现了Job
*/
JobDetail cleanQrJob =
JobBuilder.newJob(CleanQrJob.class)
.withIdentity("CleanQrJob")
.build();
/**
* 触发器1.
*/
SimpleTrigger min_30 =
TriggerBuilder
.newTrigger()
.withIdentity("min_30")
.startNow()
//间隔时间60*30秒
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(60 * 30).repeatForever())
.build();
/**
* 触发器2
*/
SimpleTrigger hour_6 =
TriggerBuilder
.newTrigger()
.withIdentity("hour_6")
.startNow()
//间隔时间60 * 60 * 6秒
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(60 * 60 * 6).repeatForever())
.build();
try {
/**
* 启动
*/
scheduler.start();
/**
* 按触发器1执行第1个任务
*/
scheduler.scheduleJob(cleanOrderJob, min_30);
/**
* 按触发器2执行第2个任务
*/
scheduler.scheduleJob(cleanQrJob, hour_6);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}