上一節咱們學習了Quartz的基本用法html
這一節學習經過XML配置的形式來執行任務java
這一節主要認識一些屬性,爲下一步打基礎數據庫
代碼下載:連接:http://pan.baidu.com/s/1ge6jFDD 密碼:gaiiexpress
咱們在安裝了Quartz後,會在目錄下生成job_scheduling_data_2_0.xsd文件,此文件是XML配置智能提示用,如圖所示:有利於咱們編寫XML服務器
雖然有了智能提示,可是咱們實際的配置也是照着模板來套入而已,下面來看一個XMLide
<?xml version="1.0" encoding="UTF-8"?> <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> <processing-directives> <overwrite-existing-data>true</overwrite-existing-data> </processing-directives> <schedule> <job> <name>jobName1</name> <group>jobGroup1</group> <description>jobDesciption1</description> <job-type>QuartzTest.HelloJob, QuartzTest</job-type> <durable>true</durable> <recover>false</recover> <job-data-map> <!--參數--> <entry> <key>key0</key> <value>value0</value> </entry> <entry> <key>key1</key> <value>value1</value> </entry> <entry> <key>key2</key> <value>value2</value> </entry> </job-data-map> </job> <trigger> <simple> <name>simpleName</name> <group>simpleGroup</group> <description>SimpleTriggerDescription</description> <job-name>jobName1</job-name> <job-group>jobGroup1</job-group> <start-time>2017-1-1 00:00:01</start-time> <end-time>2020-05-04 00:00:00</end-time> <misfire-instruction>SmartPolicy</misfire-instruction> <repeat-count>100</repeat-count> <!--執行100次--> <repeat-interval>1000</repeat-interval> <!--間隔1秒一次--> </simple> </trigger> </schedule> </job-scheduling-data>
解讀一下這個XML表達的意思:學習
也是很容易就看得懂!spa
一樣的您也能夠把Cron表達式配置在Trigger節點.net
<trigger> <cron> <name>JobTrigger</name> <group>JobTriggerGroup</group> <job-name>ResourcesJob</job-name> <job-group>ResourcesGroup</job-group> <cron-expression>0 */1 * * * ?</cron-expression> </cron> </trigger>
調用方式:線程
一樣的在Main入口
var properties = new NameValueCollection { ["quartz.scheduler.instanceName"] = "XmlConfiguredInstance", ["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz", ["quartz.threadPool.threadCount"] = "5", ["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz", ["quartz.plugin.xml.fileNames"] = "~/quartz_jobs.xml" }; ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); // we need to add calendars manually, lets create a silly sample calendar var dailyCalendar = new DailyCalendar("00:01", "23:59"); dailyCalendar.InvertTimeRange = true; sched.AddCalendar("cal1", dailyCalendar, false, false); sched.Start();
NameValueCollection 屬性比較固定通常不須要更改,只須要指定XML的路徑便可
屬性的解析,有興趣的瞭解一下,不清楚也沒有關係,基本配置都是通用的,除非特別狀況,咱們再回過頭來研究
名稱 必須 類型 默認值
org.quartz.scheduler.instanceName 否 String 'QuartzScheduler' org.quartz.scheduler.instanceId 否 String 'NON_CLUSTERED' org.quartz.scheduler.instanceIdGenerator.class 否 String org.quartz.simpl.SimpleInstanceIdGenerator org.quartz.scheduler.threadName 否 String instanceName+'_QuartzSchedulerThread' org.quartz.scheduler.idleWaitTime 否 Long 30000 org.quartz.scheduler.dbFailureRetryInterval 否 Long 15000 org.quartz.scheduler.classLoadHelper.class 否 String org.quaartz.simpl.CascadingClassLoadHelper org.quartz.context.key.SOME_KEY 否 String None org.quartz.scheduler.jobFactory.class 否 String org.quartz.simple.SimpleJobFactory
·org.quartz.scheduler.instanceName 每一個 Scheduler 必須給定一個名稱來標識。當在同一個程序中有多個實例時,這個名稱做爲客戶代碼識別是哪一個 Scheduler 而用。假如你用到了集羣特性,你就必須爲集羣中的每個實例使用相同的名稱,以使它們成爲「邏輯上」 是同一個 Scheduler 。
·org.quartz.scheduler.instanceId 每一個 Quartz Scheduler 必須指定一個惟一的 ID。這個值能夠是任何字符串值,只要對於全部的 Scheduler 是惟一的。若是你想要自動生成的 ID,那你可使用 AUTO 做爲 instanceId 。從版本 1.5.1 開始,你可以定製如何自動生成實例 ID。見 instanceIDGenerator.class 屬性,會在接下來說到。
·org.quartz.scheduler.instanceIdGenerator.class 從版本 1.5.1 開始,這個屬性容許你定製instanceId 的生成,這個屬性僅被用於屬性 org.quartz.scheduler.instanceId 設置爲 AUTO 的狀況下。默認是 org.quartz.simpl.SimpleInstanceIdGenerator ,它會基於主機名和時間戳來產生實例 ID 的。 ·org.quartz.scheduler.threadName 能夠是對於 Java 線程來講有效名稱的任何字符串。假如這個屬性未予指定,線程將會接受 Scheduler 名稱 (org.quartz.scheduler.instanceName ) 前附加上字符串 '_QuartzSchedulerThread' 做爲名稱。 ·org.quartz.scheduler.idelWaitTime 這個屬性設置了當 Scheduler 處於空閒時轉而再次查詢可用 Trigger 時所等待的毫秒數。一般,你無需調整這個參數,除非你正使用 XA 事物,遇到了 Trigger 本該當即觸發而發生延遲的問題。 ·org.quartz.scheduler.dbFailureRetryInterval 這個屬性設置 Scheduler 在檢測到 JobStore 到某處的鏈接(好比到數據庫的鏈接) 斷開後,再次嘗試鏈接所等待的毫秒數。這個參數在使用 RamJobStore 無效。 ·org.quartz.scheduler.classLoadHelper.class 對於多數健狀的應用,所使用的默認值爲 org.quartz.simpl.CascadingClassLoadHelper 類,它會依序使用其餘的 ClassLoadHelper 類,直到有一個能正常工做爲止。你大概沒必須爲這個屬性指定任何其餘的類,除非有可能在應用服務器中時。當前全部可能的 ClassLoadHelper 實現可在 org.quartz.simpl 包中找到。 ·org.quartz.context.key.SOME_KEY 這個屬性用於向 "Scheduler 上下文" 中置入一個 名-值 對錶示的字符串值。(見 Scheduler.getContext() )。所以,好比設置了 org.quartz.context.key.MyEmail = myemail@somehost.com 就至關於執行了 scheduler.getContext().put("MyEmail", myemail@somehost.com ) ·org.quartz.scheduler.userTransactionURL 它設置了 Quartz 能在哪裏定位到應用服務器的 UserTransaction 管理器的 JNDI URL。默認值(未設定的話) 是 java:comp/UserTransaction ,這幾乎能工做於全部的應用服務器中。Websphere 用戶也許須要設置這個屬性爲 jta/usertransaction 。這個屬性僅用於 Quartz 配置使用 JobStoreCMT 的狀況,而且 org.quartz.scheduler.wrapJobExecutionInUserTransaction 被設定成了 true 。 ·org.quartz.scheduler.wrapJobExecutionInUserTransaction 若是你要 Quartz 在調用你的 Job 的 execute 以前啓動一個 UserTransaction 的話,設置這個屬性爲 true 。這個事物將在 Job 的 execute 方法完成和 JobDataMap (假如是一個 StatefulJob ) 更新後提交。默認值爲 false 。 ·org.quartz.scheduler.jobFactory.class 這是所用的 JobFactory 的類名稱。默認爲 org.quartz.simpl.SimpleJobFactory 。你也能夠試試 org.quartz.simpl.PropertySettingJobFactory 。一個 Job 工廠負責產生 Job 類的實例。SimpleFactory 類是調用 Job 類的 newInstance() 方法。PropertySettingJobFactory 也會調用 newInstance() ,但還會使用 JobDataMap 中的內容以反射方式設置 Job Bean 的屬性。