Quartz也常用在Web應(yīng)用中,常見的是交由Spring托管的形式,但這里并非介紹這個(gè)。這里介紹Quartz在Web應(yīng)用中單獨(dú)使用。我們看下本章的大綱:
(1)大體思路說明;
(2)新建一個(gè)Web Project;
(3)創(chuàng)建一個(gè)Job;
(4)創(chuàng)建一個(gè)ApplicationContextListener;
(5)常用的Cron Schedule;
接下來看下具體的內(nèi)容:
(1)大體思路說明;
一般來說,Web應(yīng)用啟動(dòng)時(shí),應(yīng)注冊(cè)已經(jīng)確定的定時(shí)任務(wù);一些動(dòng)態(tài)的、未確定觸發(fā)時(shí)間的定時(shí)任務(wù),后續(xù)可通過靜態(tài)的Scheduler注冊(cè)。
所以我們創(chuàng)建一個(gè)Web項(xiàng)目,在ServerContextListener初始化的時(shí)候,添加我們的定時(shí)定時(shí)任務(wù)調(diào)度器,在銷毀的時(shí)候,關(guān)閉任務(wù)調(diào)度器。
(2)新建一個(gè)Web Project;
新建一個(gè)web maven project。
在pom.xml文件中添加依賴:
<groupId>org.quartz-scheduler<span class="hljs-name"groupId>
<artifactId>quartz<span class="hljs-name"artifactId>
<version>2.2.3<span class="hljs-name"version>
javax.servlet
servlet-api
3.1-b02
(3)創(chuàng)建一個(gè)Job;
創(chuàng)建一個(gè)實(shí)現(xiàn)Job類的Class取名為HelloJob,代碼如下:
package com.kfit.job;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
- 任務(wù)類.
- @author Angel --守護(hù)天使
- @version v.0.1
- @date 2017年4月21日
*/
**public **class HelloJob implements Job{
**public ****void** execute(JobExecutionContext context) **throws **JobExecutionException {
// 執(zhí)行響應(yīng)的任務(wù).
System. ***out*** .println("HelloJob.execute,"+**new** Date());
}
}
(4)創(chuàng)建一個(gè)ApplicationContextListener;
新建一個(gè)實(shí)現(xiàn)ServletContextListener的類ApplicationContextListener,代碼如下:
package com.kfit.job;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
@WebListener
**public **class ApplicationContextListener implements ServletContextListener{
**private** Scheduler scheduler = **null** ;
**public ****void** contextInitialized(ServletContextEvent arg0) {
**try** {
/*
*在 Quartz 中, scheduler 由 scheduler 工廠創(chuàng)建:DirectSchedulerFactory 或者 StdSchedulerFactory。第二種工廠 StdSchedulerFactory 使用較多,
*因?yàn)?DirectSchedulerFactory 使用起來不夠方便,需要作許多詳細(xì)的手工編碼設(shè)置。
*/
// 獲取Scheduler實(shí)例
scheduler = StdSchedulerFactory. *getDefaultScheduler* ();
scheduler.start();
System. ***out*** .println("scheduler.start");
System. ***out*** .println(scheduler.getSchedulerName());
//具體任務(wù).
JobDetail jobDetail = JobBuilder. *newJob* (HelloJob. **class** ).withIdentity("job1","group1").build();
//觸發(fā)時(shí)間點(diǎn). (每5秒執(zhí)行1次.)
SimpleScheduleBuilder simpleScheduleBuilder =SimpleScheduleBuilder. *simpleSchedule* ().withIntervalInSeconds(5).repeatForever();
Trigger trigger = TriggerBuilder. *newTrigger* ().withIdentity("trigger1","group1").startNow().withSchedule(simpleScheduleBuilder).build();
// 交由Scheduler安排觸發(fā)
scheduler.scheduleJob(jobDetail,trigger);
} **catch** (SchedulerException e) {
e.printStackTrace();
}
}
**public ****void** contextDestroyed(ServletContextEvent arg0) {
**try** {
scheduler.shutdown();
} **catch** (SchedulerException e) {
e.printStackTrace();
}//關(guān)閉定時(shí)任務(wù)調(diào)度器.
}
}
(5)常用的Cron Schedule;
相對(duì)于其他方式定義定時(shí)任務(wù)的觸發(fā)時(shí)間,我們較常用Cron Schedule:
// 具體任務(wù)
JobDetail job = JobBuilder.newJob(HelloJob. **class** ).withIdentity("job1", "group1").build();
// 觸發(fā)時(shí)間點(diǎn)
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 * * * * ? *");
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(cronScheduleBuilder).build();
// 交由Scheduler安排觸發(fā)
scheduler.scheduleJob(job, trigger);
-
Web
+關(guān)注
關(guān)注
2文章
1257瀏覽量
69368 -
Quartz
+關(guān)注
關(guān)注
0文章
7瀏覽量
7930 -
spring
+關(guān)注
關(guān)注
0文章
338瀏覽量
14312
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論