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();
}
}
}