Quartz-作業調度架構_quartz

來源:互聯網
上載者:User
簡介  

 

  Quartz 是個開源的作業調度架構,為在 Java 應用程式中進行作業調度提供了簡單卻強大的機制。Quartz 允許開發人員根據時間間隔(或天)來調度作業。它實現了作業和觸發器的多對多關係,還能把多個作業與不同的觸發器關聯。整合了 Quartz 的應用程式可以重用來自不同事件的作業,還可以為一個事件組合多個作業。雖然可以通過屬性檔案(在屬性檔案中可以指定 JDBC 事務的資料來源、全域作業和/或觸發器接聽程式、外掛程式、線程池,以及更多)配置 Quartz,但它根本沒有與應用程式伺服器的上下文或引用整合在一起。結果就是作業不能訪問 Web 服務器的內建函式;例如,在使用 WebSphere 應用伺服器時,由 Quartz 調度的作業並不能影響伺服器的動態緩衝和資料來源。 使用前奏

  1. 建立一個maven項目(可以是web也可以是普通的java項目),添加上相關依賴。

<properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <quartz.version>2.2.0</quartz.version></properties><dependencies>....<!--quartz dependency-->      <dependency>          <groupId>org.quartz-scheduler</groupId>          <artifactId>quartz-jobs</artifactId>          <version>${quartz.version}</version>      </dependency>      <dependency>          <groupId>org.quartz-scheduler</groupId>          <artifactId>quartz</artifactId>          <version>${quartz.version}</version>      </dependency></dependencies>

  2. 在resources下建立一個設定檔quartz.properties,添加如下內容:

org.quartz.scheduler.instanceName = MyScheduler #指定調度器的名稱org.quartz.threadPool.threadCount = 3 #線程池中最多同時有3個線程運行org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore #指定Quartz的資料(job及trigger資訊)儲存位置,RamJobStore指記憶體
啟動一個Scheduler
package com.netease.test.quartz;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.impl.StdSchedulerFactory;/** * User: hzwangxx * Date: 14-2-26 * Time: 0:16 */public class QuartzTest {    public static void main(String[] args) {        try {            //1.從StdSchedulerFactory工廠中擷取一個任務調度器            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();            //2. 啟動調度器            scheduler.start();            System.out.println("scheduler is start...");            //關閉調度器            scheduler.shutdown();        } catch (SchedulerException e) {            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.        }    }}/*  console output:2014-02-26 00:22:31,744 0    [main] INFO  - Using default implementation for ThreadExecutor2014-02-26 00:22:31,766 22   [main] INFO  - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl2014-02-26 00:22:31,767 23   [main] INFO  - Quartz Scheduler v.2.2.0 created.2014-02-26 00:22:31,768 24   [main] INFO  - RAMJobStore initialized.2014-02-26 00:22:31,769 25   [main] INFO  - Scheduler meta-data: Quartz Scheduler (v2.2.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.  NOT STARTED.  Currently in standby mode.  Number of jobs executed: 0  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.2014-02-26 00:22:31,769 25   [main] INFO  - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'2014-02-26 00:22:31,769 25   [main] INFO  - Quartz scheduler version: 2.2.02014-02-26 00:22:31,769 25   [main] INFO  - Scheduler MyScheduler_$_NON_CLUSTERED started.scheduler is start...2014-02-26 00:22:31,769 25   [main] INFO  - Scheduler MyScheduler_$_NON_CLUSTERED shutting down.2014-02-26 00:22:31,770 26   [main] INFO  - Scheduler MyScheduler_$_NON_CLUSTERED paused.2014-02-26 00:22:31,770 26   [main] INFO  - Scheduler MyScheduler_$_NON_CLUSTERED shutdown complete.*/
 簡單Helloworld
package com.netease.test.quartz;import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;import java.util.Date;import static org.quartz.JobBuilder.newJob;import static org.quartz.SimpleScheduleBuilder.simpleSchedule;import static org.quartz.TriggerBuilder.newTrigger;/** * User: hzwangxx * Date: 14-2-26 * Time: 0:16 */public class QuartzTest {    public static void main(String[] args) {        try {            //1.從StdSchedulerFactory工廠中擷取一個任務調度器            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();            //2. 啟動調度器            scheduler.start();            System.out.println("scheduler is start...");            //3. 添加定時任務            //  3.1 定義job            JobDetail job = newJob(HelloJob.class)                    .withIdentity("job1", "group1")                    .build();            //  3.2 定義Trigger,使得job現在就運行,並每隔3s中運行一次,重複運行5次, withRepeatCount(number)設定job運行次數為number+1            Trigger trigger = newTrigger()                    .withIdentity("trigger1", "group1")                    .startNow()                    .withSchedule(simpleSchedule()                        .withIntervalInSeconds(3)                        .withRepeatCount(4))                    .build();            //  3.3 交給scheduler去調度            scheduler.scheduleJob(job, trigger);            //4. 關閉調度器            //scheduler.shutdown();        } catch (SchedulerException e) {            e.printStackTrace();        }    }    /**     * 自訂Job,實現Job介面並實現execute方法     */    public static class HelloJob implements Job{        public void execute(JobExecutionContext context) throws JobExecutionException {            System.out.println("execute job at " + new Date() + " by trigger " + context.getTrigger().getJobKey());        }    }}/*  console output:2014-02-26 01:05:25,766 0    [main] INFO  - Using default implementation for ThreadExecutor2014-02-26 01:05:25,794 28   [main] INFO  - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl2014-02-26 01:05:25,795 29   [main] INFO  - Quartz Scheduler v.2.2.0 created.2014-02-26 01:05:25,797 31   [main] INFO  - RAMJobStore initialized.2014-02-26 01:05:25,798 32   [main] INFO  - Scheduler meta-data: Quartz Scheduler (v2.2.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.  NOT STARTED.  Currently in standby mode.  Number of jobs executed: 0  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.2014-02-26 01:05:25,798 32   [main] INFO  - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'2014-02-26 01:05:25,799 33   [main] INFO  - Quartz scheduler version: 2.2.02014-02-26 01:05:25,799 33   [main] INFO  - Scheduler MyScheduler_$_NON_CLUSTERED started.scheduler is start...execute job at Wed Feb 26 01:05:25 CST 2014 by trigger group1.job1execute job at Wed Feb 26 01:05:28 CST 2014 by trigger group1.job1execute job at Wed Feb 26 01:05:31 CST 2014 by trigger group1.job1execute job at Wed Feb 26 01:05:34 CST 2014 by trigger group1.job1execute job at Wed Feb 26 01:05:37 CST 2014 by trigger group1.job1*/
 API說明

Quartz架構核心的幾個類如下: Scheduler - 與scheduler進行互動的主要API,整個生命週期是由SchedulerFactory建立到調用shutdown()方法 Job - 希望scheduler進行調度的自訂任務介面,主要實現該介面的execute方法。 JobDetail - 定義Job的相關資訊 Trigger - 定義調度器調度任務的觸發器,主要描述任務的執行時間,周期等資訊 JobBuilder - 用來定義和建立JobDetail執行個體 TriggerBuilder - 用來定義和建立Trigger執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.