這一篇文章,我們緊接著上一篇的文章,講講在Quartz在java project的項(xiàng)目中如何進(jìn)行使用,在這里我們使用maven進(jìn)行構(gòu)建項(xiàng)目。先看下本章的大綱:
(1)新建工程quartz-java;
(2)配置pom.xml文件;
(3)編碼說明;
(4)編寫Job類;
(5)編寫啟動(dòng)類進(jìn)行代碼測(cè)試;
(6)quartz.properties配置文件說明;
接下里一起看下具體的內(nèi)容:
(1)新建工程quartz-java;
新建一個(gè)java project取名為quartz-java。
(2)配置pom.xml文件;
在pom.xml文件中添加quartz的依賴:
<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>
(3)編碼說明;
(一)首先我們需要定義一個(gè)任務(wù)類,比如為HelloJob ,該類需要繼承Job類,然后添加execute(JobExecutionContext context)方法,在這個(gè)方法中就是我們具體的任務(wù)執(zhí)行的地方。
(二)在哪里定義“在什么時(shí)候執(zhí)行什么任務(wù)呢?”:那么我們需要Scheduler,此類的創(chuàng)建方式使用Quartz提供的工廠類StdSchedulerFactory.getDefaultScheduler()進(jìn)行創(chuàng)建。
(三)如何觸發(fā)呢:scheduler.scheduleJob(jobDetail,trigger);進(jìn)行觸發(fā)定時(shí)任務(wù),在這里需要兩個(gè)參數(shù)。jobDetail可以通過JobBuilder.newJob進(jìn)行創(chuàng)建,在這里就需要制定一個(gè)Job類了,也就是我們第一步創(chuàng)建的HelloJob;trigger類的話,可以通過TriggerBuilder.newTrigger進(jìn)行創(chuàng)建。
(4)編寫Job類;
編寫HelloJob任務(wù)類:
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());
}
}
(5)編寫啟動(dòng)類進(jìn)行代碼測(cè)試;
在Main方法中進(jìn)行編碼測(cè)試:
package com.kfit;
import java.util.concurrent.TimeUnit;
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;
import com.kfit.job.HelloJob;
/**
- 直接在Main方法中進(jìn)行啟動(dòng)測(cè)試.
- @author Angel --守護(hù)天使
- @version v.0.1
- @date 2017年4月21日
*/
**public **class App {
**public ****static ****void** main(String[] args) **throws** SchedulerException, InterruptedException {
/*
*在 Quartz 中, scheduler 由 scheduler 工廠創(chuàng)建:DirectSchedulerFactory或者StdSchedulerFactory。第二種工廠StdSchedulerFactory 使用較多,
*因?yàn)镈irectSchedulerFactory 使用起來不夠方便,需要作許多詳細(xì)的手工編碼設(shè)置。
*/
// 獲取Scheduler實(shí)例
Scheduler scheduler = StdSchedulerFactory. *getDefaultScheduler* ();
scheduler.start();
System. ***out*** .println("scheduler.start");
//具體任務(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);
//睡眠20秒.
TimeUnit. ***SECONDS*** .sleep(20);
scheduler.shutdown();//關(guān)閉定時(shí)任務(wù)調(diào)度器.
System. ***out*** .println("scheduler.shutdown");
}
}
執(zhí)行代碼查看控制臺(tái)的打印信息:
scheduler.start
HelloJob.execute,Fri Apr 2119:50:01 CST 2017
HelloJob.execute,Fri Apr 2119:50:06 CST 2017
HelloJob.execute,Fri Apr 2119:50:11 CST 2017
HelloJob.execute,Fri Apr 2119:50:16 CST 2017
HelloJob.execute,Fri Apr 2119:50:21 CST 2017
scheduler.shutdown
(6)quartz.properties配置文件說明;
Quartz中有一個(gè)配置quartz.properties可以配置參數(shù),比如:線程池的容量,實(shí)例名稱。比如:
org.quartz.scheduler.instanceName= MyScheduler
org.quartz.threadPool.threadCount= 3
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
org.quartz.threadPool.threadCount:配置線程池的容量,即表示同時(shí)最多可運(yùn)行的線程數(shù)量。
org.quartz.scheduler.instanceName:scheduler實(shí)例名稱。
org.quartz.jobStore.class:job存儲(chǔ)方式,RAMJobStore是使用JobStore最簡(jiǎn)單的一種方式,它也是性能最高效的,顧名思義,JobStore是把它的數(shù)據(jù)都存儲(chǔ)在RAM中,這也是它的快速和簡(jiǎn)單配置的原因;JDBCJobStore也是一種相當(dāng)有名的JobStore,它通過JDBC把數(shù)據(jù)都保存到數(shù)據(jù)庫中,所以在配置上會(huì)比RAMJobStore復(fù)雜一些,而且不像RAMJobStore那么快,但是當(dāng)我們對(duì)數(shù)據(jù)庫中的表的主鍵創(chuàng)建索引時(shí),性能上的缺點(diǎn)就不是很關(guān)鍵的了。
您可以在代碼中打印scheduler實(shí)例名稱,如下代碼:
Scheduler scheduler =StdSchedulerFactory. getDefaultScheduler ();
scheduler.start();
System. ***out*** .println("scheduler.start");
System. ***out*** .println(scheduler.getSchedulerName());
-
JAVA
+關(guān)注
關(guān)注
19文章
2952瀏覽量
104479 -
Quartz
+關(guān)注
關(guān)注
0文章
7瀏覽量
7924
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論