gbk

          Quartz定時任務學習(四)調度器

          org.quartz.Scheduler 類層次

          QuartzFigure4.2.JPG

          作為一個 Quartz 用戶,你要與實現了 org.quartz.Scheduler 接口的類交互。在你調用它的任何 API 之前,你需要知道如何創建一個 Scheduler 的實例。取而代之的是用了某個工廠方法來確保了構造出 Sheduler 實例并正確的得到初始化,Quartz 框架為這一目的提供了 org.quartz.SchedulerFactory 接口。角色 SchedulerFactory 就是用來產生 Scheduler 實例的。當 Scheduler 實例被創建之后,就會存到一個倉庫中(org.quartz.impl.SchedulerRepository),這個倉庫還提供了通過一個 class loader 查詢實例的機制。要使用 Scheduler 實例,客戶端必須從工廠(和隨同的倉庫中)使用不同方法調用來獲取到它們。換句話說,要通過工廠創建一個 Scheduler 實例并獲取到它需要經由兩次方法調用。

          所有的 Scheduler 實例應該由 SchedulerFactory 來創建

          QuartzFigure4.3.JPG

          使用 DirectSchedulerFactory 構造實例方法代碼如下:

          DirectSchedulerFactory factory=DirectSchedulerFactory.getInstance();  
                    try {  
                        // Initialize the Scheduler Factory with 10 threads  
                        factory.createVolatileScheduler(10);  

                        // Get a scheduler from the factory  
                        Scheduler scheduler = factory.getScheduler();

          方法 createVolatileScheduler() 方法不會返回 scheduler 的實例。createXXX() 方法是告訴工廠如何配置要創建的 Scheduler 實例。你必須調用方法 getScheduler() 獲取到在工廠上執行方法 createXXX() 產生的實例。實際上,在調用 getScheduler() 方法之前,你必須調用其中一個 createXXX() 方法;否則,你將有收到一個 SchedulerException 錯誤,因為根本沒有 Scheduler 實例存在。
          方法 createVolatileScheduler() 帶有單個參數:要創建的線程數量。

          使用 StdSchedulerFactory 構造一個調度器實例,具體使用方法如下:

          StdSchedulerFactory factory = new StdSchedulerFactory();  

                    // Create the properties to configure the factory  
                    Properties props = new Properties();  

                    // required to supply threadpool class and num of threads
                    props.put(StdSchedulerFactory.PROP_THREAD_POOL_CLASS,"org.quartz.simpl.SimpleThreadPool");  
                    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 的線程的數量。這兩個屬性是必須的。但是我們也可以這樣的得到實例
          StdSchedulerFactory factory = new StdSchedulerFactory();
          Scheduler scheduler = factory.getScheduler();

          因為StdSchedulerFactory 工廠類會有個方法initialize()自動去加載一些屬性配置,假如你使用無參的initialize() 方法,StdSchedulerFactory會取classpath下找到quartz.properties并加載。默認不配置屬性時候會自動加載quartz.properties文件的配置。

          使用靜態的 getDefaultScheduler() 方法創建 Scheduler

          使用 StdSchedulerFactory 來創建 Scheduler 實例的方式很普遍,因此在 StdSchedulerFactory 直接提供了一個方便的靜態方法 getDefaultScheduler(),它就是使用前面列出的幾個步驟來初始化工廠的。
          Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

          在靜態方法 getDefaultScheduler() 方法中調用了空的構造方法。假如之前未調用過任何一個 initialize() 方法,那么無參的 initialize() 方法會被調用。這會開始去按照前面說的順序加載文件。默認情況下,quartz.properties 會被定位到,并從中加載屬性。

          Scheduler 的功能

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

          設置 Scheduler 為 standby 模式會導致 Scheduler 暫時停止查找 Job 去執行,publicvoid standby() throws SchedulerException; standby 模式,Scheduler 不再試圖去執行 Job,因為那些搜尋要執行的 Job 的線程被暫停了下來。停止則調用無參的 shutdown() 方法相當于調用 shutdown(false).

          posted on 2008-07-20 01:25 百科 閱讀(1533) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灯塔市| 甘泉县| 呼图壁县| 合川市| 桐城市| 安顺市| 南昌县| 策勒县| 巴林左旗| 开平市| 喜德县| 黎平县| 康定县| 洛隆县| 巴南区| 衡阳县| 兴山县| 曲阜市| 石台县| 定南县| 定襄县| 江津市| 余姚市| 阿拉尔市| 元朗区| 县级市| 望都县| 老河口市| 吉水县| 彭州市| 旅游| 金华市| 湖南省| 黄平县| 灵丘县| 驻马店市| 长顺县| 宝鸡市| 佛坪县| 沙田区| 柏乡县|