Quartz.net 2.0的使用說明
Quartz.NET是一個開源的作業調度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#寫成,可用于WinForm和ASP.NET應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而創建簡單的或復雜的調度。它有很多特征,如:數據庫支持,集群,插件,支持cron-like表達式等等。
好了,現在具體來說一下怎么使用Quartz.net 2.0。
1.到網上下載Quartz.net 2.0,下載完后解壓,里面有vs.net2008和vs.net2010兩個版本。
2.新建一個空項目,在里面增加一個類庫應用程序和web應用程序,由于我經常是應用在的asp.net web應用程序中。
3.在web應用程序中引用Quartzdll程序集(你下載的Quartz.net 2.0有)
4.在類庫應用程序中新建一個測試類和一個測試方法。
5.在web應用程序默認的defalut.asp.cs文件中實現 IJob,然后實現 IJob的Execute方法,在實現方法中寫上你調用的類庫應用程序的測試方法。
6.在web.config文件中加入下面的代碼:
<configSections> <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/> <sectionGroup name="common"> <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/> </sectionGroup></configSections> <common> <logging> <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging"> <arg key="showLogName" value="true"/> <arg key="showDataTime" value="true"/> <arg key="level" value="DEBUG"/> <arg key="dateTimeFormat" value="HH:mm:ss:fff"/> </factoryAdapter> </logging> </common> <quartz> <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/> <add key="quartz.threadPool.threadCount" value="10"/> <add key="quartz.threadPool.threadPriority" value="2"/> <add key="quartz.jobStore.misfireThreshold" value="60000"/> <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
</quartz></pre>7.在web應用程序中增加Global.asax文件,在Application_Start方法中加入下面的代碼:
Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(); sched = sf.GetScheduler(); sched.Start(); JobKey jobkey = new JobKey("myjob", "mygroup"); IJobDetail job = JobBuilder.Create<Test.TestExcute>().WithIdentity(jobkey).Build(); //ITrigger trigger = TriggerBuilder.Create().StartNow().Build(); //比較復雜的應用 //IOperableTrigger trigger = new CronTriggerImpl("trigName", "group1", "0/2 * * * * ?"); //簡單方式 SimpleTriggerImpl trigger = new SimpleTriggerImpl("simpleTrig", "simpleGroup", 10, DateTime.Now.AddSeconds(5) - DateTime.Now); sched.ScheduleJob(job, trigger);
8.在Application_Start方法中加入下面的代碼:
// 在應用程序關閉時運行的代碼 if (sched != null) { sched.Shutdown(true); }ok,到現在為止就可以啟動你的應用程序試試了。
注意:每次調試時,要重啟一下應用服務器。
關于時間設置的一些相關內容,引用自:http://www.cnblogs.com/shanyou/archive/2007/09/04/881935.html,如下:
Quartz.NET設計者做了一個設計選擇來從調度分離開作業。Quartz.NET中的觸發器用來告訴調度程序作業什么時候觸發。框架提供了一把觸發器類型,但兩個最常用的是SimpleTrigger和CronTrigger。SimpleTrigger為需要簡單打火調度而設計。
典型地,如果你需要在給定的時間和重復次數或者兩次打火之間等待的秒數打火一個作業,那么SimpleTrigger適合你。另一方面,如果你有許多復雜的作業調度,那么或許需要CronTrigger。
CronTrigger是基于Calendar-like調度的。當你需要在除星期六和星期天外的每天上午10點半執行作業時,那么應該使用CronTrigger。正如它的名字所暗示的那樣,CronTrigger是基于Unix克隆表達式的。
Cron表達式被用來配置CronTrigger實例。Cron表達式是一個由7個子表達式組成的字符串。每個子表達式都描述了一個單獨的日程細節。這些子表達式用空格分隔,分別表示:
1. Seconds 秒
2. Minutes 分鐘
3. Hours 小時
4. Day-of-Month 月中的天
5. Month 月
6. Day-of-Week 周中的天
7. Year (optional field) 年(可選的域)
一個cron表達式的例子字符串為"0 0 12 ? * WED",這表示“每周三的中午12:00”。
單個子表達式可以包含范圍或者列表。例如:前面例子中的周中的天這個域(這里是"WED")可以被替換為"MON-FRI", "MON, WED, FRI"或者甚至"MON-WED,SAT"。
通配符('*')可以被用來表示域中“每個”可能的值。因此在"Month"域中的*表示每個月,而在Day-Of-Week域中的*則表示“周中的每一天”。
所有的域中的值都有特定的合法范圍,這些值的合法范圍相當明顯,例如:秒和分域的合法值為0到59,小時的合法范圍是0到23,Day-of-Month中值得合法凡范圍是0到31,但是需要注意不同的月份中的天數不同。月份的合法值是0到11。或者用字符串JAN,FEB MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 及DEC來表示。Days-of-Week可以用1到7來表示(1=星期日)或者用字符串SUN, MON, TUE, WED, THU, FRI 和SAT來表示.
'/'字符用來表示值的增量,例如, 如果分鐘域中放入'0/15',它表示“每隔15分鐘,從0開始”,如果在份中域中使用'3/20',則表示“小時中每隔20分鐘,從第3分鐘開始”或者另外相同的形式就是'3,23,43'。
'?'字符可以用在day-of-month及day-of-week域中,它用來表示“沒有指定值”。這對于需要指定一個或者兩個域的值而不需要對其他域進行設置來說相當有用。
'L'字符可以在day-of-month及day-of-week中使用,這個字符是"last"的簡寫,但是在兩個域中的意義不同。例如,在day-of-month域中的"L"表示這個月的最后一天,即,一月的31日,非閏年的二月的28日。如果它用在day-of-week中,則表示"7"或者"SAT"。但是如果在day-of-week域中,這個字符跟在別的值后面,則表示"當月的最后的周XXX"。例如:"6L" 或者 "FRIL"都表示本月的最后一個周五。當使用'L'選項時,最重要的是不要指定列表或者值范圍,否則會導致混亂。
'W' 字符用來指定距離給定日最接近的周幾(在day-of-week域中指定)。例如:如果你為day-of-month域指定為"15W",則表示“距離月中15號最近的周幾”。
'#'表示表示月中的第幾個周幾。例如:day-of-week域中的"6#3" 或者 "FRI#3"表示“月中第三個周五”。
作為一個例子,下面的Quartz.NET克隆表達式將在星期一到星期五的每天上午10點15分執行一個作業。
0 15 10 ? * MON-FRI
下面的表達式
0 15 10 ? * 6L 2007-2010
將在2007年到2010年的每個月的最后一個星期五上午10點15分執行作業。你不可能用SimpleTrigger來做這些事情。你可以用兩者之中的任何一個,但哪個跟合適則取決于你的調度需要。
轉自:http://blog.csdn.net/junfeng120125/article/details/7950812