基於Quartz.Net類庫的Cron定時任務(例項)
阿新 • • 發佈:2018-11-29
cron常用表示式
標準格式為六位:從左至右依次為“秒 分 時 日 月 周”
七位格式:從左至右依次為“秒 分 時 日 月 周 年”
-
六位格式年份預設為1970-2099
-
“周” 從1-7,數字或英文縮寫(1或 SUN,MON,TUE,WED,THU,FRI,SAT)
-
* 表示所有可能的值
-
? 僅被用於天(月)和天(星期)兩個子表示式,表示不指定值,當兩個子表示式其中之一被指定了確定值以後,為了避免衝突,需要將另一個子表示式的值設為“?”
-
在確定周幾的時候,“日”一定得判斷,如【0 15 10 ? * MON-FRI】,“日”用“?”,不能用“ * ”
常用示例
【0 * 14 * * ?】: 每天下午的 2點到2點59分每分觸發
【0 0-30 0-23 ? * 1-5】: 週一到週五內每天0-23:59點之間0-30分鐘執行
【0 15 10 ? * MON-FRI 】: 從週一到週五每天上午的10點15分觸發
【0/3 * * ? * MON-FRI 】: 從週一到週五每天每3秒觸發
【0 * 14 * * ? 】: 每天下午的 2點到2點59分每分觸發
【0 15 10 * * ? 2005】: 2005年每天10點15分觸發
基於Quartz.Net類庫的
C#
實現
- 引入
Quartz.Net
類庫 - 配置檔案
<configuration> <configSections> <!--此配置節必須緊跟configuration,且只有一個--> <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> <appSettings> <!--自定義配置:每五分鐘執行一次--> <add key="cron" value="* 5 * * * ?"/> </appSettings> </configuration>
3.程式碼編寫,以控制檯程式為例,在自定義的觸發時間內重複執行指定方法,常用於服務的編寫
using Quartz;
using Quartz.Impl;
using System;
namespace QuartzTest
{
public class Program
{
static void Main(string[] args)
{
UseJob();
Console.ReadKey();
}
public static void UseJob()
{
IJobDetail jobDetail = JobBuilder.Create(typeof(MyJob)).WithIdentity("TestJob1", "Group1").Build();
ITrigger trigger = TriggerBuilder.Create().WithIdentity("TestJob1", "Group1").StartNow().WithCronSchedule("1 37 9 * * ?").Build(); //"0/3 * 0-23 12 9 ?" 9月12日0-23點中每3秒
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();
//var sched = StdSchedulerFactory.GetDefaultScheduler();
sched.Start();
sched.ScheduleJob(jobDetail, trigger);
}
}
/// <summary>
/// 方法實體,繼承於IJob
/// </summary>
public class MyJob:IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("****************************");
Console.WriteLine("我的任務!!!");
Console.WriteLine("****************************");
}
}
}