国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Quartz學(xué)習(xí)之多作業(yè)、監(jiān)聽(tīng)

miracledan / 1113人閱讀

摘要:多作業(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

相關(guān)文章

  • Quartz學(xué)習(xí)之入門學(xué)習(xí)

    摘要:觸發(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...

    Pandaaa 評(píng)論0 收藏0
  • Quartz學(xué)習(xí)之常用Trigger方法記錄

    摘要:分類中共包含有種觸發(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...

    vibiu 評(píng)論0 收藏0
  • Quartz學(xué)習(xí)之Cron Expressions表達(dá)式

    摘要:請(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è)...

    Mr_zhang 評(píng)論0 收藏0
  • 【Java定時(shí)任務(wù)調(diào)度工具】Quartz

    摘要:例如在周上設(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...

    Render 評(píng)論0 收藏0
  • Quartz 2 定時(shí)任務(wù)(三):異常與中斷處理

    摘要:注意為了共享在同一個(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...

    Hydrogen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<