摘要:多作業例子在這個例子中,我們將介紹如何通過多個作業。在調度框架中,每個作業將被連接到一個唯一的觸發,并且由調度器運行它。備注說明在中,一個觸發器觸發多個作業是不可以的。第一步創建個作業,,和。
多作業例子
在這個例子中,我們將介紹如何通過Quartz API 多個作業。在Quartz調度框架中,每個作業將被連接到一個唯一的觸發,并且由調度器運行它。
備注說明:在 Quartz 中,一個觸發器觸發多個作業是不可以的。
第一步:創建3個作業,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個作業,分配它們到特定觸發器并調度它。
</>復制代碼
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);
}
}
輸出的結果如下:
</>復制代碼
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
監聽例子
在這個例子中,我們回學到如何創建一個 JobListener, 跟蹤運行工作狀態在作業完成。
第一步:創建一個作業,并在作業中拋出一個異常(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");
}
}
第二步:創建監聽
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; // 必須要返回一個監聽的名字
}
/**
* 當 job 執行的時候會調用這個方法
*/
@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 執行后運行
*/
@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());
}
}
}
第三步:測試執行
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 {
// 新建一個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秒執行一次
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// 添加 監聽到 jobKey
scheduler.getListenerManager().addJobListener(new HelloJobListener(),
KeyMatcher.keyEquals(jobKey));
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
輸出結果
</>復制代碼
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71247.html
摘要:觸發器也可以給予名稱和放置在組中,以方便地將它們調度內組織。作業可以被添加到所述調度器一次,而是具有多個觸發器注冊。調度類鏈接工作和觸發器到一起,并執行它。 簡介 Quartz是一個開源的作業調度框架,可以讓計劃的程序任務一個預定義的日期和時間運行。Quartz可以用來創建簡單或復雜的日程安排執行幾十,幾百,甚至是十萬的作業數。官方鏈接,戳這里 Quartz是什么? 作業調度庫 Qua...
摘要:分類中共包含有種觸發器。建立一個觸發器,每隔一分鐘,每天上午點至下午點之間建立一個觸發器,將在每天上午執行第一種實現方式第二種實現方式建立一個觸發器,將在星期三上午在系統默認值之外執行第一種方式第二種方式 Trigger分類 Quartz中共包含有4種觸發器。 常用的是: SimpleTrigger 和 CronTrigger。不常用的是:CalendarIntervalTrigger...
摘要:請注意,觸發器將不會在上午點開始,僅在,,和請注意,一些調度要求太復雜,無法用單一觸發表示例如每上午至之間每分鐘,下午至晚上點之間每分鐘一次。在這種情況下的解決方案是簡單地創建兩個觸發器,并注冊它們來運行相同的作業。 表達式說明 Cron-Expressions 用于配置 CronTrigger的實例。Cron Expressions 是由七個子表達式組成的字符串,用于描述日程表的各個...
摘要:例如在周上設置表示周一三五觸發用于遞增觸發。例如在周上設置,表示本月的最后一個星期五表示離指定日期最近那個工作日周一至周五,例如在日字段上設置,表示離每月號最近的那個工作日觸發。相關例子代碼較簡單的定時任務調度工具利用集成 筆記來源:IMOOC Java Quartz Quartz 簡介 OpenSymphony 提供的強大的開源任務調度框架 純 Java 實現,精細控制排程 Q...
摘要:注意為了共享在同一個中的,我們需要在上面這個實現類上加入和注解,詳見定時任務二多線程并發執行與數據共享。捕獲異常,取消所有觸發器在我們捕獲異常時,可以調用取消所有與這個作業有關的觸發器。 版權聲明:本文由吳仙杰創作整理,轉載請注明出處:https://segmentfault.com/a/1190000009141079 1. 作業異常 org.quartz.JobExecut...
閱讀 2236·2021-11-22 09:34
閱讀 1347·2021-10-11 10:59
閱讀 4448·2021-09-22 15:56
閱讀 3302·2021-09-22 15:08
閱讀 3413·2019-08-30 14:01
閱讀 784·2019-08-30 11:16
閱讀 1138·2019-08-26 13:51
閱讀 2920·2019-08-26 13:43