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

資訊專欄INFORMATION COLUMN

Quartz學習之入門學習

Pandaaa / 2219人閱讀

摘要:觸發器也可以給予名稱和放置在組中,以方便地將它們調度內組織。作業可以被添加到所述調度器一次,而是具有多個觸發器注冊。調度類鏈接工作和觸發器到一起,并執行它。

簡介

Quartz是一個開源的作業調度框架,可以讓計劃的程序任務一個預定義的日期和時間運行。Quartz可以用來創建簡單或復雜的日程安排執行幾十,幾百,甚至是十萬的作業數。
官方鏈接,戳這里

Quartz是什么? 作業調度庫

Quartz 是一種功能豐富的,開放源碼的作業調度庫,可以在幾乎任何Java應用程序集成 - 從最小的獨立的應用程序到規模最大電子商務系統。Quartz可以用來創建簡單或復雜的日程安排執行幾十,幾百,甚至是十萬的作業數 - 作業被定義為標準的Java組件,可以執行幾乎任何東西,可以編程讓它們執行。 Quartz調度包括許多企業級功能,如JTA事務和集群支持。

Quartz 是可自由使用,使用Apache 2.0 license授權方式。

作業調度

如果應用程序需要在給定時間執行任務,或者如果系統有連續維護作業,那么Quartz是理想的解決方案。

作業被安排在一個給定的觸發時運行。觸發器可以使用以下指令的接近任何組合來創建:

在一天中的某個時間(到毫秒)

在一周的某幾天

在每月的某一天

在一年中的某些日期

不在注冊的日歷中列出的特定日期(如商業節假日除外)

重復特定次數

重復進行,直到一個特定的時間/日期

無限重復

重復的延遲時間間隔

作業是由其創建者賦予的名字,也可以組織成命名組。觸發器也可以給予名稱和放置在組中,以方便地將它們調度內組織。作業可以被添加到所述調度器一次,而是具有多個觸發器注冊。在企業Java環境中,作業可以執行自己的工作作為分布式(XA)事務的一部分。

集群

故障切換

負載均衡

Quartz的內置的群集功能,通過JDBCJobStore依靠數據庫持久

Terracotta擴展Quartz提供集群功能,而不需要一個支持數據庫

使用的 jar 包

quartz-2.2.1.jar

quartz-jobs-2.2.1.jar

三個重要的概念簡介 Scheduler

調度器。所有的調度都是由它控制。調度類鏈接“工作”和“觸發器”到一起,并執行它。

scheduler 實例化后,可以啟動(start)、暫停(stand-by)、停止(shutdown)。注意:scheduler 被停止后,除非重新實例化,否則不能重新啟動;只有當 scheduler 啟動后,即使處于暫停狀態也不行,trigger 才會被觸發(job才會被執行)

Scheduler的生命期,從SchedulerFactory創建它時開始,到Scheduler調用shutdown()方法時結束;Scheduler被創建后,可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作(如暫停Trigger)。但是,Scheduler只有在調用start()方法后,才會真正地觸發trigger(即執行job)

Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);

Scheduler的主要函數:

start():啟動

standby():掛起

shutdown():關閉

shutdown(true)表示等待所有正在執行的job執行完畢后,在關閉scheduler

shutdown(false)即shutdown()表示直接關閉scheduler

注意關閉之后,scheduler不能從新開啟,會拋出異常

Trigger

Trigger用于觸發Job的執行。當你準備調度一個job時,你創建一個Trigger的實例,然后設置調度相關的屬性。Trigger也有一個相關聯的JobDataMap,用于給Job傳遞一些觸發相關的參數。Quartz自帶了各種不同類型的Trigger,最常用的主要是SimpleTrigger和CronTrigger。

SimpleTrigger – 允許設置開始時間,結束時間,重復間隔。主要用于一次性執行的Job(只在某個特定的時間點執行一次),或者Job在特定的時間點執行,重復執行N次,每次執行間隔T個時間單位。

CronTrigger – 允許UNIX cron表達式來指定日期和時間來運行作業。在基于日歷的調度上非常有用,如“每個星期五的正午”,或者“每月的第十天的上午10:15”等。

SimpleTrigger – 每5秒運行

Trigger trigger = TriggerBuilder
    .newTrigger()
    .withIdentity("dummyTriggerName", "group1")
    .withSchedule(
        SimpleScheduleBuilder.simpleSchedule()
        .withIntervalInSeconds(5).repeatForever())
    .build();

CronTrigger – 每5秒運行。

Trigger trigger = TriggerBuilder
    .newTrigger()
    .withIdentity("dummyTriggerName", "group1")
    .withSchedule(
        CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
    .build();
JobDetail & Job

JobDetail 定義的是任務數據,而真正的執行邏輯是在Job中。

JobDetail對象是在將job加入scheduler時,由客戶端程序(你的程序)創建的。它包含job的各種屬性設置,以及用于存儲job實例狀態信息的JobDataMap。

例子說明

1.下載 jar 包

可以從官方網站或 Maven 中央存儲庫下載 Quartz 庫文件;

2.創建一個作業

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!");
    }
}

3.創建觸發器,以及通過調度執行作業

SimpleTrigger.java

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleTrigger {

    public static void main(String[] args) throws Exception {

        JobDetail job = JobBuilder.newJob(HelloJob.class)
                .withIdentity("dummyJobName", "group1").build();

         // 定義一個Trigger
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("dummyTriggerName", "group1")        // 定義 name/group
                .withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInSeconds(5).repeatForever())
                .build();
        
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    }
}

CronTrigger.java

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class CronTrigger {

    public static void main(String[] args) throws Exception {
        JobDetail job = JobBuilder.newJob(HelloJob.class)
                .withIdentity("dummyJobName", "group").build();

        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("dummyJobName", "group")
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();

        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    }
}

輸出的結果如下:

每隔五分鐘就會打印出一條 Hello Quartz!

Hello Quartz!
Hello Quartz!
Hello Quartz!
Quartz 的其他概念

JobExecutionContext

當 Schedule 調用一個 Job,就會將 JobExecutionContext 傳遞給 Job 的 execute() 方法

Job 能通過 JobExecutionContext 對象訪問到 Quartz 運行時候的環境以及 Job本身的明細數據

JobDataMap

在進行任務調度時 JobDataMap存儲在JobExecutionContext中,非常方便獲取

JobDataMap 可以用來裝載任何可序列化的數據對象,當job 實例對象被執行時這些參數對象會傳遞給它

JobDataMap實現了JDK的Map接口,并且添加了一些非常方便的方法用來存取數據基本類型

key

將Job和Trigger注冊到Scheduler時,可以為它們設置key,配置其身份屬性。

Job和Trigger的key(JobKey和TriggerKey)可以用于將Job和Trigger放到不同的分組(group)里,然后基于分組進行操作。

同一個分組下的Job或Trigger的名稱必須唯一,即一個Job或Trigger的key由名稱(name)和分組(group)組成。

實例說明

第一步:創建一個 Job。

在這個類中,我們通過 JobExecutionContext 來獲取 JobDataMapkey以及通過自定義傳入的信息。代碼中有備注,仔細看下就知道了。

HelloJob.java

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey;

public class HelloJob implements Job{

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // TODO Auto-generated method stub
        System.out.println("Hello Quartz!");
        
        // 獲取 JobDetail 的 key 和 group
        JobKey key = context.getJobDetail().getKey();
        System.out.println("JobDetail key name: "+key.getName());
        System.out.println("JobDetail key Group: "+key.getGroup());
        
        // 從 JobExecutionContext 中獲取一個實例,  獲取從 jobDetail 傳入的數據
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        String JobMsg = dataMap.getString("message");
        Float floatMsg = dataMap.getFloat("floatData");
        System.out.println("JobDetial:"+ JobMsg);
        System.out.println("floatMsg:"+ floatMsg);
        
        //獲取 trigger 的 key 和 group
        TriggerKey triggerKey = context.getTrigger().getKey();
        System.out.println("TriggerKey key name: "+triggerKey.getName());
        System.out.println("TriggerKey key Group: "+triggerKey.getGroup());
        
        // 獲取一個 trigger 的 jobDataMap 實例
        JobDataMap triggerMap = context.getTrigger().getJobDataMap();
        String triggerMsg = dataMap.getString("message");
        System.out.println("triggerMsg:"+ triggerMsg);
    }
}

第二步:測試類

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleTrigger {

    public static void main(String[] args) throws Exception {

        JobDetail job = JobBuilder.newJob(HelloJob.class)
                .withIdentity("dummyJobName", "group1")
                .usingJobData("message", "hello myJob1")    //傳入自定義的數據
                .usingJobData("floatData", 1.2F)
                .build();

         // 定義一個Trigger
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("dummyTriggerName", "group1")        // 定義 name/group
                .usingJobData("message", "hello myTrigger")
                .withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInSeconds(5).repeatForever())
                .build();
        
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    }
}

輸出結果

Hello Quartz!
JobDetail key name: dummyJobName
JobDetail key Group: group1
JobDetial:hello myJob1
floatMsg:1.2
TriggerKey key name: dummyTriggerName
TriggerKey key Group: group1
triggerMsg:hello myJob1

w3cschool 上的quartz 教程

官方鏈接

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71215.html

相關文章

  • Quartz習之多作業、監聽

    摘要:多作業例子在這個例子中,我們將介紹如何通過多個作業。在調度框架中,每個作業將被連接到一個唯一的觸發,并且由調度器運行它。備注說明在中,一個觸發器觸發多個作業是不可以的。第一步創建個作業,,和。 多作業例子 在這個例子中,我們將介紹如何通過Quartz API 多個作業。在Quartz調度框架中,每個作業將被連接到一個唯一的觸發,并且由調度器運行它。 備注說明:在 Quartz 中,一個...

    miracledan 評論0 收藏0
  • Quartz習之常用Trigger方法記錄

    摘要:分類中共包含有種觸發器。建立一個觸發器,每隔一分鐘,每天上午點至下午點之間建立一個觸發器,將在每天上午執行第一種實現方式第二種實現方式建立一個觸發器,將在星期三上午在系統默認值之外執行第一種方式第二種方式 Trigger分類 Quartz中共包含有4種觸發器。 常用的是: SimpleTrigger 和 CronTrigger。不常用的是:CalendarIntervalTrigger...

    vibiu 評論0 收藏0
  • Quartz習之Cron Expressions表達式

    摘要:請注意,觸發器將不會在上午點開始,僅在,,和請注意,一些調度要求太復雜,無法用單一觸發表示例如每上午至之間每分鐘,下午至晚上點之間每分鐘一次。在這種情況下的解決方案是簡單地創建兩個觸發器,并注冊它們來運行相同的作業。 表達式說明 Cron-Expressions 用于配置 CronTrigger的實例。Cron Expressions 是由七個子表達式組成的字符串,用于描述日程表的各個...

    Mr_zhang 評論0 收藏0
  • Vim入門習之二(cheat sheet)

    摘要:有種東西學了記不住,是正則表達式,就是了。最近在用寫個,我一個按鍵盤的,又沒什么太多的閑錢去購買高大上的,不得已開始用上了學的好多遍都沒學會的。 有10種東西學了記不住,00是正則表達式,10就是Vim了。 最近在用python寫個side project,我一個按鍵盤的,又沒什么太多的閑錢去購買高大上的IDE,不得已開始用上了學的好多遍都沒學會的Vim。Vim有多牛X,隨便問一個代碼...

    Shimmer 評論0 收藏0
  • Vim入門習之二(cheat sheet)

    摘要:有種東西學了記不住,是正則表達式,就是了。最近在用寫個,我一個按鍵盤的,又沒什么太多的閑錢去購買高大上的,不得已開始用上了學的好多遍都沒學會的。 有10種東西學了記不住,00是正則表達式,10就是Vim了。 最近在用python寫個side project,我一個按鍵盤的,又沒什么太多的閑錢去購買高大上的IDE,不得已開始用上了學的好多遍都沒學會的Vim。Vim有多牛X,隨便問一個代碼...

    muzhuyu 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<