摘要:多作業(yè)例子在這個(gè)例子中,我們將介紹如何通過(guò)多個(gè)作業(yè)。在調(diào)度框架中,每個(gè)作業(yè)將被連接到一個(gè)唯一的觸發(fā),并且由調(diào)度器運(yùn)行它。備注說(shuō)明在中,一個(gè)觸發(fā)器觸發(fā)多個(gè)作業(yè)是不可以的。第一步創(chuàng)建個(gè)作業(yè),,和。
多作業(yè)例子
在這個(gè)例子中,我們將介紹如何通過(guò)Quartz API 多個(gè)作業(yè)。在Quartz調(diào)度框架中,每個(gè)作業(yè)將被連接到一個(gè)唯一的觸發(fā),并且由調(diào)度器運(yùn)行它。
備注說(shuō)明:在 Quartz 中,一個(gè)觸發(fā)器觸發(fā)多個(gè)作業(yè)是不可以的。
第一步:創(chuàng)建3個(gè)作業(yè),JobA,JobB和JobC。JobA.class
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobA implements Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Job A is runing //every 5 seconds "); } }
JobB.class
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobB implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Job B is runing"); } }
JobC.class
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class JobC implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Job C is runing"); } }第二步:使用QuartzAPI聲明上述3個(gè)作業(yè),分配它們到特定觸發(fā)器并調(diào)度它。
import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; // 這里引入自己的Job 的地址 import com.demo.quartz.job.JobA; import com.demo.quartz.job.JobB; import com.demo.quartz.job.JobC; public class CronTriggerMultiJob { public static void main(String[] args) throws Exception { JobKey jobKeyA = new JobKey("JobA", "group1"); JobDetail jobA = JobBuilder.newJob(JobA.class).withIdentity(jobKeyA) .build(); JobKey jobKeyB = new JobKey("JobB", "group1"); JobDetail jobB = JobBuilder.newJob(JobB.class).withIdentity(jobKeyB) .build(); JobKey jobKeyC = new JobKey("JobC", "group1"); JobDetail jobC = JobBuilder.newJob(JobC.class).withIdentity(jobKeyC) .build(); Trigger trigger1 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName1", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Trigger trigger2 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName2", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Trigger trigger3 = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName3", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(jobA, trigger1); scheduler.scheduleJob(jobB, trigger2); scheduler.scheduleJob(jobC, trigger3); } }
輸出的結(jié)果如下:
Job A is runing //every 5 seconds Job B is runing Job C is runing Job A is runing //every 5 seconds Job B is runing Job C is runing監(jiān)聽(tīng)例子
在這個(gè)例子中,我們回學(xué)到如何創(chuàng)建一個(gè) JobListener, 跟蹤運(yùn)行工作狀態(tài)在作業(yè)完成。
第一步:創(chuàng)建一個(gè)作業(yè),并在作業(yè)中拋出一個(gè)異常(JobExecutionException)HelloJob.java
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloJob implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { // TODO Auto-generated method stub System.out.println("Hello Quartz!"); throw new JobExecutionException("Testing Exception"); } }第二步:創(chuàng)建監(jiān)聽(tīng)
HelloJobListener.java
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobListener; public class HelloJobListener implements JobListener { public static final String LISTENER_NAME = "dummyJobListenerName"; @Override public String getName() { return LISTENER_NAME; // 必須要返回一個(gè)監(jiān)聽(tīng)的名字 } /** * 當(dāng) job 執(zhí)行的時(shí)候會(huì)調(diào)用這個(gè)方法 */ @Override public void jobExecutionVetoed(JobExecutionContext context) { String jobName = context.getJobDetail().getKey().toString(); System.out.println("jobToBeExecuted"); System.out.println("Job : " + jobName + " is going to start..."); } @Override public void jobToBeExecuted(JobExecutionContext context) { System.out.println("jobExecutionVetoed"); } /** * job 執(zhí)行后運(yùn)行 */ @Override public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { System.out.println("jobWasExecuted"); String jobName = context.getJobDetail().getKey().toString(); System.out.println("Job : " + jobName + " is finished..."); if (!jobException.getMessage().equals("")) { System.out.println("Exception thrown by: " + jobName + " Exception: " + jobException.getMessage()); } } }第三步:測(cè)試執(zhí)行
HelloJobListenerTest.java
import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.matchers.KeyMatcher; public class HelloJobListenerTest { public static void main(String[] args) throws Exception { // 新建一個(gè)jobKey JobKey jobKey = new JobKey("dummyJobName", "group1"); // name dummyJobName group group1 JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity(jobKey) .build(); Trigger trigger = TriggerBuilder .newTrigger() .withIdentity("dummyTriggerName", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒執(zhí)行一次 .build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler(); // 添加 監(jiān)聽(tīng)到 jobKey scheduler.getListenerManager().addJobListener(new HelloJobListener(), KeyMatcher.keyEquals(jobKey)); scheduler.start(); scheduler.scheduleJob(job, trigger); } }
輸出結(jié)果
jobExecutionVetoed Hello Quartz! 五月 26, 2018 3:23:15 下午 org.quartz.core.JobRunShell run 信息: Job group1.dummyJobName threw a JobExecutionException: org.quartz.JobExecutionException: Testing Exception at com.wq.study.quartz.HelloJob.execute(HelloJob.java:14) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) jobWasExecuted Job : group1.dummyJobName is finished... Exception thrown by: group1.dummyJobName Exception: Testing Exception
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/71247.html
摘要:觸發(fā)器也可以給予名稱和放置在組中,以方便地將它們調(diào)度內(nèi)組織。作業(yè)可以被添加到所述調(diào)度器一次,而是具有多個(gè)觸發(fā)器注冊(cè)。調(diào)度類鏈接工作和觸發(fā)器到一起,并執(zhí)行它。 簡(jiǎn)介 Quartz是一個(gè)開(kāi)源的作業(yè)調(diào)度框架,可以讓計(jì)劃的程序任務(wù)一個(gè)預(yù)定義的日期和時(shí)間運(yùn)行。Quartz可以用來(lái)創(chuàng)建簡(jiǎn)單或復(fù)雜的日程安排執(zhí)行幾十,幾百,甚至是十萬(wàn)的作業(yè)數(shù)。官方鏈接,戳這里 Quartz是什么? 作業(yè)調(diào)度庫(kù) Qua...
摘要:分類中共包含有種觸發(fā)器。建立一個(gè)觸發(fā)器,每隔一分鐘,每天上午點(diǎn)至下午點(diǎn)之間建立一個(gè)觸發(fā)器,將在每天上午執(zhí)行第一種實(shí)現(xiàn)方式第二種實(shí)現(xiàn)方式建立一個(gè)觸發(fā)器,將在星期三上午在系統(tǒng)默認(rèn)值之外執(zhí)行第一種方式第二種方式 Trigger分類 Quartz中共包含有4種觸發(fā)器。 常用的是: SimpleTrigger 和 CronTrigger。不常用的是:CalendarIntervalTrigger...
摘要:請(qǐng)注意,觸發(fā)器將不會(huì)在上午點(diǎn)開(kāi)始,僅在,,和請(qǐng)注意,一些調(diào)度要求太復(fù)雜,無(wú)法用單一觸發(fā)表示例如每上午至之間每分鐘,下午至晚上點(diǎn)之間每分鐘一次。在這種情況下的解決方案是簡(jiǎn)單地創(chuàng)建兩個(gè)觸發(fā)器,并注冊(cè)它們來(lái)運(yùn)行相同的作業(yè)。 表達(dá)式說(shuō)明 Cron-Expressions 用于配置 CronTrigger的實(shí)例。Cron Expressions 是由七個(gè)子表達(dá)式組成的字符串,用于描述日程表的各個(gè)...
摘要:例如在周上設(shè)置表示周一三五觸發(fā)用于遞增觸發(fā)。例如在周上設(shè)置,表示本月的最后一個(gè)星期五表示離指定日期最近那個(gè)工作日周一至周五,例如在日字段上設(shè)置,表示離每月號(hào)最近的那個(gè)工作日觸發(fā)。相關(guān)例子代碼較簡(jiǎn)單的定時(shí)任務(wù)調(diào)度工具利用集成 筆記來(lái)源:IMOOC Java Quartz Quartz 簡(jiǎn)介 OpenSymphony 提供的強(qiáng)大的開(kāi)源任務(wù)調(diào)度框架 純 Java 實(shí)現(xiàn),精細(xì)控制排程 Q...
摘要:注意為了共享在同一個(gè)中的,我們需要在上面這個(gè)實(shí)現(xiàn)類上加入和注解,詳見(jiàn)定時(shí)任務(wù)二多線程并發(fā)執(zhí)行與數(shù)據(jù)共享。捕獲異常,取消所有觸發(fā)器在我們捕獲異常時(shí),可以調(diào)用取消所有與這個(gè)作業(yè)有關(guān)的觸發(fā)器。 版權(quán)聲明:本文由吳仙杰創(chuàng)作整理,轉(zhuǎn)載請(qǐng)注明出處:https://segmentfault.com/a/1190000009141079 1. 作業(yè)異常 org.quartz.JobExecut...
閱讀 2228·2021-11-22 09:34
閱讀 1337·2021-10-11 10:59
閱讀 4435·2021-09-22 15:56
閱讀 3288·2021-09-22 15:08
閱讀 3408·2019-08-30 14:01
閱讀 779·2019-08-30 11:16
閱讀 1133·2019-08-26 13:51
閱讀 2910·2019-08-26 13:43