Quartz.net2.2初體驗


簡介:Quartz.net是一個開源的作用調度框架,非常強大,能夠通過簡單的配置幫助我們定時具體的操作。相對於我們用的線程里面while(true)然后sleep來執行某個操作,應該算的上是高端,大氣,上檔次了。目前最新版本是2.2,新的版本里面有些方法名發生了變化,從之前的版本用過來的人應該會有體會.這里我使用最常用,也是最穩定的方式--Windows服務里面使用Quartz.net,並且使用配置的方式來設置觸發器。

步驟:

1.定義使用的job:就是我們具體要執行的操作.

namespace Quartz.MyJobs
{
    public class HelloWorldJob : IJob
    {
        #region IJob 成員

        public void Execute(IJobExecutionContext context)
        {
            //LogHelper.LogHelper.Log("執行HelloWorld Job");
            String path = AppDomain.CurrentDomain.BaseDirectory + "Job\\";
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            File.AppendAllText(path + "job.txt", DateTime.Now + "\n");
        }

        #endregion
    }
}

有了job,之后就在配置里面以Cron表達式的方式來設置Trigger和job配置節(quartz_jobs.xml)

<?xml version="1.0" encoding="UTF-8"?>

<!-- This file contains job definitions in schema version 2.0 format -->

<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>HelloWorldJob</name>
        <group>sampleGroup</group>
        <description>Sample job for Quartz Server</description>
        <job-type>Quartz.MyJobs.HelloWorldJob, Quartz.MyJobs</job-type>
        <durable>true</durable>
        <recover>false</recover>
    </job>

    <trigger>
      <cron>
        <name>sampleSimpleTrigger</name>
        <group>sampleSimpleGroup</group>
        <description>Simple trigger to simply fire sample job</description>
        <job-name>HelloWorldJob</job-name>
        <job-group>sampleGroup</job-group>
        <cron-expression>0/3 * * * * ?</cron-expression> <!--每3秒中執行一次-->
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>

還有有一個quartz.config配置文件,里面有這樣一行:quartz.plugin.xml.fileNames = ~/quartz_jobs.xml(這里的文件對應我們上面配置文件夾)。

現在job和trigger已經定義好了,接下來我們在Windows服務里面聲明一個調度器把兩者結合起來就OK了。

namespace Quartz.WinService
{
    partial class MyQuartzService : ServiceBase
    {
        IScheduler sched = null;
        public MyQuartzService()
        {
            InitializeComponent();
            ISchedulerFactory factory = new StdSchedulerFactory();
            sched = factory.GetScheduler();
        }

        protected override void OnStart(string[] args)
        {
            sched.Start();
            LogHelper.LogHelper.Log("服務啟動...");
        }

        protected override void OnStop()
        {
            sched.Shutdown();
            LogHelper.LogHelper.Log("服務停止");
        }
    }
}

到這里就結束了。如果你的項目里面需要定時執行某個操作,使用Quartz.net絕對是非常棒的選擇。

關於Cron表達式的了解可以點擊這里


免責聲明!

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



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