亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Quartz.NET總結(一)入門

2019-11-14 13:54:08
字體:
來源:轉載
供稿:網友

  前段時間,花了大量的時間,將原先的計劃任務,切換到Quartz.NET來進行管理。原先的后臺定時服務都是通過計劃任務來實現的,但是隨著業務增長,計劃任務也越來越多,每個后臺服務,都得創建一個計劃任務。日常的維護和管理非常麻煩。

 

  于是乎,一咬牙,決定引入Quartz.NET框架,統一都管理全部的后臺定時服務。切換過程確實很麻煩。直到今天,才終于有時間整理總結Quartz.NET的相關內容。

 

  Quartz.NET的優點和使用場景,這里不再多說,網上有很多說明,總的來說就是,Quartz.NET是一個開源的作業調度框架,非常適合在平時的工作中,定時輪詢數據庫同步,定時郵件通知,定時處理數據等。 Quartz.NET允許開發人員根據時間間隔(或天)來調度作業。它實現了作業和觸發器的多對多關系,還能把多個作業與不同的觸發器關聯,配置靈活方便。

 

  參考官方學習文檔:http://www.quartz-scheduler.net/documentation/index.html

  快速搭建一個Quartz,源代碼下載

 

  第一步:新建解決方案和相關項目,并安裝相關程序包,如下圖所示:

      

        Quartz依賴Common.Logging和Common.Logging.Log4Net,而且Log4Net也是比較熟悉的日志工具,因此我們實際使用中,也是log4net記錄日志,另外定時作業一般都是在window服務中,我們也可用Topshelf來創建我們的window服務。

 

  第二步:創建兩個Job類Job1,Job2。實現IJob,在Execute方法里編寫要處理的業務邏輯,系統就會按照Quartz的配置,定時處理。

  using System;

  using System.Threading;
  namespace Quartz.Net.Jobs
  {
    /// <summary>
    /// 實現IJob接口
    /// </summary>
    public class Job1 : IJob
    {
      PRivate static readonly Common.Logging.ILog logger = Common.Logging.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
      public void Execute(IJobExecutionContext context)
      {
        try
        {
          logger.Info("Job1 任務運行開始");

          for (int i = 0; i < 5; i++)
          {

            Thread.Sleep(100);
            logger.InfoFormat("Job1 正在運行{0}", i);
          }

          logger.Info("Job1任務運行結束");
        }
        catch (Exception ex)
        {
          logger.Error("Job1 運行異常", ex);
        }

      }
    }
  }

  第三步:配置quartz.config、quartz_jobs.xml

  quartz.config

  # You can configure your scheduler in either <quartz> configuration section

  # or in quartz properties file

  # Configuration section has precedence

  quartz.scheduler.instanceName = QuartzTest

  # configure thread pool info

  quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz

  quartz.threadPool.threadCount = 10

  quartz.threadPool.threadPriority = Normal

  # job initialization plugin handles our xml reading, without it defaults are used

  quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz

  quartz.plugin.xml.fileNames = ~/quartz_jobs.xml

  # export this server to remoting context

  #quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz

  #quartz.scheduler.exporter.port = 555

  #quartz.scheduler.exporter.bindName = QuartzScheduler

  #quartz.scheduler.exporter.channelType = tcp

  #quartz.scheduler.exporter.channelName = httpQuartz

  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>
    <!--定義Job1 Job-->
    <job>
      <name>Job1</name>
      <group>JobGroup</group>
      <description>Quartz Job1</description>
      <job-type>Quartz.Net.Jobs.Job1,Quartz.Net.Jobs</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <!--定義Job2 Job-->
    <job>
      <name>Job2</name>
      <group>JobGroup</group>
      <description>Quartz Job2</description>
      <job-type>Quartz.Net.Jobs.Job2,Quartz.Net.Jobs</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
    <!--定義Job1 觸發器 每30秒執行一次Job1任務-->
    <trigger>
      <cron>
        <name>Job1Trigger</name>
        <group>JobTriggerGroup</group>
        <job-name>Job1</job-name>
        <job-group>JobGroup</job-group>
        <cron-expression>0/30 * * * * ?</cron-expression>
      </cron>
    </trigger>
    <!--定義Job2 觸發器 每分鐘執行一次Job2任務-->
    <trigger>
      <cron>
        <name>Job2Trigger1</name>
        <group>JobTriggerGroup</group>
        <job-name>Job2</job-name>
        <job-group>JobGroup</job-group>
        <cron-expression>0 * * * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
  </job-scheduling-data>

 

  第四步:宿主程序,可以是window服務,也可以是后臺Console程序,如何用Topshelf來創建我們的window服務,請看另外一篇文章《使用Topshelf 開發windows服務》。

  namespace Quartz.Net.Console
  {
    class Program
    {
      private static IScheduler scheduler;
      static void Main(string[] args)
      {
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        scheduler = schedulerFactory.GetScheduler();

        scheduler.Start();
      }
    }
  }

  注意:quartz_jobs.xml和quartz.config這兩個文件,要手動復制到輸出目錄下,或者在vs中,分別選中這兩個文件→右鍵屬性→復制到輸入目錄設為:始終復制。

  否則讀取不到這兩個配置文件,程序無法運行。

  運行后,效果如下圖:  

      

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97香蕉超级碰碰久久免费软件| 2021久久精品国产99国产精品| 97人人爽人人喊人人模波多| 亚洲视频在线视频| 亚洲欧美在线第一页| 久久久噜噜噜久久久| 亚洲欧美日韩在线高清直播| 色与欲影视天天看综合网| 中文字幕久精品免费视频| 欧美高跟鞋交xxxxhd| 在线激情影院一区| 欧美日韩午夜视频在线观看| 日韩有码在线视频| 日韩电影在线观看免费| 国产精品人成电影在线观看| 992tv在线成人免费观看| 午夜精品一区二区三区av| 国产精品黄页免费高清在线观看| 性欧美在线看片a免费观看| 国产成人精品久久二区二区| 色综合色综合久久综合频道88| 日韩在线视频观看| 国产精品成熟老女人| 91网站免费看| 亚洲精品ady| 日韩在线观看免费高清完整版| 日韩欧美一区视频| 国产精品69精品一区二区三区| 欧美激情一区二区三区久久久| 91精品国产乱码久久久久久蜜臀| www高清在线视频日韩欧美| 亚洲国产欧美日韩精品| 国内精品国产三级国产在线专| 视频在线观看99| 中文字幕亚洲一区二区三区| 国产精品久久久一区| 97久久久久久| 亚洲人成亚洲人成在线观看| 91av成人在线| 亚洲欧洲一区二区三区在线观看| 国产亚洲精品美女久久久久| 国产欧美日韩专区发布| 日韩人在线观看| 777精品视频| 亚洲精品一区久久久久久| 亚洲午夜性刺激影院| 91免费综合在线| 亚洲成人aaa| 亚洲成人教育av| 欧美人与性动交| 精品成人乱色一区二区| 国产亚洲激情在线| 欧美成人中文字幕在线| 色综合久久88| 亚洲乱亚洲乱妇无码| 欧美激情啊啊啊| 日韩欧美第一页| 亚洲视频网站在线观看| 亚洲男人av在线| 国产综合视频在线观看| 日韩在线观看精品| 88xx成人精品| 另类美女黄大片| 久久男人资源视频| 97精品视频在线| 亚洲成人久久电影| 精品国产一区二区三区久久久| 国产精品影片在线观看| 亚洲xxx自由成熟| 欧美激情综合色综合啪啪五月| 久久91精品国产91久久久| 亚洲欧美制服综合另类| 欧美午夜精品伦理| 92国产精品久久久久首页| 欧美电影在线观看高清| 久久久国产精彩视频美女艺术照福利| 日韩av在线免费观看一区| 亚洲精品免费av| 欧美日韩亚洲精品内裤| 一区二区三区四区视频| 久久视频在线直播| 亚洲日本成人网| 九九久久久久久久久激情| 亚洲第一网站男人都懂| www.欧美视频| www亚洲精品| 日韩在线不卡视频| 欧美另类交人妖| 欧美激情va永久在线播放| 亚洲第一综合天堂另类专| 国产综合视频在线观看| 欧美最顶级的aⅴ艳星| 日韩美女视频免费在线观看| 欧美视频免费在线观看| 91亚洲午夜在线| 色偷偷91综合久久噜噜| 亚洲欧美国产精品va在线观看| 国产精品福利小视频| 这里只有精品视频| 韩国精品美女www爽爽爽视频| 欧美性极品xxxx做受| xxxx欧美18另类的高清| 最近2019年手机中文字幕| 欧美一级片在线播放| 都市激情亚洲色图| 国产日本欧美在线观看| 亚洲欧美日本精品| 亚洲一级黄色av| 92福利视频午夜1000合集在线观看| 久久精品亚洲精品| 青草成人免费视频| 97超级碰碰碰久久久| 成人国内精品久久久久一区| www.欧美精品一二三区| 亚洲福利精品在线| 在线观看精品自拍私拍| 国内精品久久久久影院 日本资源| 亚洲a成v人在线观看| 久久精品99国产精品酒店日本| 亚洲网址你懂得| 日本91av在线播放| 国产在线不卡精品| 国产精品jvid在线观看蜜臀| 国产精品高清免费在线观看| 国产精品极品美女在线观看免费| 在线视频中文亚洲| 久久久久免费精品国产| 中文字幕在线看视频国产欧美在线看完整| 欧美激情videoshd| 久国内精品在线| 国产成人aa精品一区在线播放| 国产精品激情av电影在线观看| 亚洲天堂av电影| 午夜精品久久久久久99热| 欧美激情性做爰免费视频| 亚洲xxxxx| 欧美一级大胆视频| 久久久免费电影| 91亚洲精品久久久| 欧美成人中文字幕| 欧美午夜丰满在线18影院| 亚洲男人天堂古典| 日韩欧美国产高清91| 91久久久久久久久久久久久| 91精品视频在线看| 亚洲美女精品成人在线视频| 国产日产欧美精品| 9.1国产丝袜在线观看| 国产成人av在线| 亚洲男人的天堂在线| 欧美日韩国产中字| 播播国产欧美激情| 欧美午夜电影在线| 精品久久香蕉国产线看观看亚洲| 国产精品1区2区在线观看| 亚洲欧美综合区自拍另类| 欧美成人剧情片在线观看| 欧美视频第一页| 日韩电视剧在线观看免费网站| 国产中文欧美精品| 日韩av不卡在线| 日韩av123| 欧美日韩在线一区| 国产精品久久久久一区二区|