Net作業調度(一) -Quartz.Net入門


背景

很多時候,項目需要在不同時刻,執行一個或很多個不同的作業。

Windows執行計划這時並不能很好的滿足需求了,迫切需要一個更為強大,方便管理,集群部署的作業調度框架。

介紹

Quartz一個開源的作業調度框架,OpenSymphony的開源項目。Quartz.Net 是Quartz的C#移植版本。

它一些很好的特性:

1:支持集群,作業分組,作業遠程管理。 

2:自定義精細的時間觸發器,使用簡單,作業和觸發分離。

3:數據庫支持,可以寄宿Windows服務,WebSite,winform等。

實戰

Quartz框架的一些基礎概念解釋:

   Scheduler     作業調度器。

   IJob             作業接口,繼承並實現Execute, 編寫執行的具體作業邏輯。

  JobBuilder       根據設置,生成一個詳細作業信息(JobDetail)。

  TriggerBuilder   根據規則,生產對應的Trigger

Nuget安裝 

 PM> Install-Package Quartz 

下面是簡單使用例子,附帶詳細的注釋:

 static void Main(string[] args)
        {
            //從工廠中獲取一個調度器實例化
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

            scheduler.Start();       //開啟調度器

            //==========例子1(簡單使用)===========

            IJobDetail job1 = JobBuilder.Create<HelloJob>()  //創建一個作業
                .WithIdentity("作業名稱", "作業組")
                .Build();

            ITrigger trigger1 = TriggerBuilder.Create()
                                        .WithIdentity("觸發器名稱", "觸發器組")
                                        .StartNow()                        //現在開始
                                        .WithSimpleSchedule(x => x         //觸發時間,5秒一次。
                                            .WithIntervalInSeconds(5)
                                            .RepeatForever())              //不間斷重復執行
                                        .Build();


            scheduler.ScheduleJob(job1, trigger1);      //把作業,觸發器加入調度器。

            //==========例子2 (執行時 作業數據傳遞,時間表達式使用)===========

            IJobDetail job2= JobBuilder.Create<DumbJob>()
                                        .WithIdentity("myJob", "group1")
                                        .UsingJobData("jobSays", "Hello World!")
                                        .Build();


            ITrigger trigger2 = TriggerBuilder.Create()
                                        .WithIdentity("mytrigger", "group1")
                                        .StartNow()
                                        .WithCronSchedule("/5 * * ? * *")    //時間表達式,5秒一次      
                                        .Build();


            scheduler.ScheduleJob(job2, trigger2);      
         
            //scheduler.Shutdown();         //關閉調度器。
        }

聲明要執行的作業,HelloJob:

 /// <summary>
    /// 作業
    /// </summary>
    public class HelloJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("作業執行!");
        }
    }

聲明要執行的作業,DumbJob:

public class DumbJob : IJob
    {
        /// <summary>
        ///  context 可以獲取當前Job的各種狀態。
        /// </summary>
        /// <param name="context"></param>
        public void Execute(IJobExecutionContext context)
        {

            JobDataMap dataMap = context.JobDetail.JobDataMap;

            string content = dataMap.GetString("jobSays");

            Console.WriteLine("作業執行,jobSays:" + content);
        }
    } 

 

其WithCronSchedule("") 擁有強大的Cron時間表達式,正常情況下WithSimpleSchedule(x) 已經滿足大部分對日期設置的要求了。

Quartz.Net官方2.X教程  http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html

Quartz.Net開源地址   https://github.com/quartznet/quartznet


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM