Quartz定時任務學習(四)排程器

2021-09-06 23:36:31 字數 3124 閱讀 7671

org.quartz.scheduler 類層次

作為乙個 quartz 使用者,你要與實現了 org.quartz.scheduler 介面的類互動。在你呼叫它的任何 api 之前,你需要知道如何建立乙個 scheduler 的例項。取而代之的是用了某個工廠方法來確保了構造出 sheduler 例項並正確的得到初始化,quartz 框架為這一目的提供了 org.quartz.schedule***ctory 介面。角色 schedule***ctory 就是用來產生 scheduler 例項的。當 scheduler 例項被建立之後,就會存到乙個倉庫中(org.quartz.impl.schedulerrepository),這個倉庫還提供了通過乙個 class loader 查詢例項的機制。要使用 scheduler 例項,客戶端必須從工廠(和隨同的倉庫中)使用不同方法呼叫來獲取到它們。換句話說,要通過工廠建立乙個 scheduler 例項並獲取到它需要經由兩次方法呼叫。

所有的 scheduler 例項應該由 schedule***ctory 來建立

使用 directschedule***ctory構造例項方法**如下:

directschedule***ctory factory=directschedule***ctory.getinstance();   

try {   

// initialize the scheduler factory with 10 threads   

factory.createvolatilescheduler(10);  

// get a scheduler from the factory   

scheduler scheduler = factory.getscheduler();

方法 createvolatilescheduler() 方法不會返回 scheduler 的例項。create***() 方法是告訴工廠如何配置要建立的 scheduler 例項。你必須呼叫方法 getscheduler() 獲取到在工廠上執行方法 create***() 產生的例項。實際上,在呼叫 getscheduler() 方法之前,你必須呼叫其中乙個 create***() 方法;否則,你將有收到乙個 schedulerexception 錯誤,因為根本沒有 scheduler 例項存在。

方法 createvolatilescheduler() 帶有單個引數:要建立的執行緒數量。

使用 stdschedule***ctory構造乙個排程器例項,具體使用方法如下:

stdschedule***ctory factory = new stdschedule***ctory();   

// create the properties to configure the factory   

properties props = new properties();   

// required to supply threadpool class and num of threads

props.put(stdschedule***ctory.prop_thread_pool_class,"org.quartz.simpl.******threadpool");   

props.put("org.quartz.threadpool.threadcount", "10");   

try {   

// initialize the factory with properties   

factory.initialize(props);   

scheduler scheduler = factory.getscheduler();

在這個例子中向工廠傳遞了兩個屬性,它們分別是實現了 org.quartz.spi.threadpool 介面的類名和 scheduler 用來處理 job 的執行緒的數量。這兩個屬性是必須的。但是我們也可以這樣的得到例項

stdschedule***ctory factory = new stdschedule***ctory(); 

scheduler scheduler = factory.getscheduler();

因為stdschedule***ctory工廠類會有個方法initialize()自動去載入一些屬性配置,假如你使用無參的initialize() 方法,stdschedule***ctory會取classpath下找到quartz.properties並載入。預設不配置屬性時候會自動載入quartz.properties檔案的配置。

使用靜態的 getdefaultscheduler() 方法建立 scheduler

使用 stdschedule***ctory 來建立 scheduler 例項的方式很普遍,因此在 stdschedule***ctory 直接提供了乙個方便的靜態方法 getdefaultscheduler(),它就是使用前面列出的幾個步驟來初始化工廠的。

scheduler scheduler = stdschedule***ctory.getdefaultscheduler();

在靜態方法 getdefaultscheduler() 方法中呼叫了空的構造方法。假如之前未呼叫過任何乙個 initialize() 方法,那麼無參的 initialize() 方法會被呼叫。這會開始去按照前面說的順序載入檔案。預設情況下,quartz.properties 會被定位到,並從中載入屬性。

scheduler 的功能

scheduler除了啟動外,scheduler操作包括查詢、設定 scheduler 為 standby 模式、繼續、停止。啟動scheduler非常簡單,只需要呼叫 start() 方法即可。只有在scheduler 有例項或standby 模式才能呼叫start() 方法,一旦呼叫shutdown() 方法之後就不能在呼叫start() 方法。

設定 scheduler 為 standby 模式會導致 scheduler 暫時停止查詢 job 去執行,public void standby() throwsschedulerexception; standby 模式,scheduler 不再試圖去執行 job,因為那些搜尋要執行的 job 的執行緒被暫停了下來。停止則呼叫無參的 shutdown() 方法相當於呼叫 shutdown(false).

Quartz定時任務排程框架

簡單使用步驟 1.首先匯入quartz相關依賴 dependency 2.第二步 定義乙個類實現job介面,重寫execute方法 author administrator public class testjob implements job 第三步定義乙個主方法類 這裡使用的觸發器是crontr...

quartz定時任務

此檔案被包含在spring配置檔案中,其中 引數 的值遵循如下規則 0 0 12 每天中午12點觸發 0 15 10 每天上午10 15觸發 0 15 10 每天上午10 15觸發 0 15 10 每天上午10 15觸發 0 15 10 2005 2005年的每天上午10 15觸發 0 14 在每天...

Quartz定時任務

排程器 負責時間監控,如果任務到了指定時間則呼叫器開始工作.觸發器 當排程器執行任務時,會呼叫觸發器開啟執行緒完成任務.job 定時任務統稱.jobdetail 定時任務的具體的細節 呼叫過程 新建立定時任務.將任務交給排程器管理 呼叫器負責監控時間,當到了指定的時間後.呼叫觸發器開啟新的執行緒去完...