1. 程式人生 > >任務排程~Quartz.net實現簡單的任務除錯

任務排程~Quartz.net實現簡單的任務除錯

任務排程類似於sqlserver中的作業,即按週期性執行某個程式,程式碼段,或者某種服務,在JAVA環境中出現了Quartz,它可以簡單的實現任務的除錯,而像lucene一樣,它會有對於的.net版本,Quartz.net,今天我們來做一個簡單的實驗,其時很簡單的實驗:

環境:.net4.0+mvc3

功能:每1分鐘去向一個檔案裡寫日誌(當然,如果你要呼叫某個服務,只要讓它實現IJob介面即可。

所需要的程式集

首先在WEB.Config的configuration節點裡做一些必要的配置

複製程式碼
 1   <configSections>
 2     <section name="
quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 3 <sectionGroup name="common"> 4 <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/> 5 </sectionGroup> 6
</configSections> 7 <common> 8 <logging> 9 <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging"> 10 <arg key="showLogName" value="true"/> 11 <arg key="showDataTime" value="true"/> 12 <arg key="
level" value="INFO"/> 13 <arg key="dateTimeFormat" value="HH:mm:ss:fff"/> 14 </factoryAdapter> 15 </logging> 16 </common> 17 18 <quartz> 19 <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/> 20 21 <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/> 22 <add key="quartz.threadPool.threadCount" value="10"/> 23 <add key="quartz.threadPool.threadPriority" value="2"/> 24 25 <add key="quartz.jobStore.misfireThreshold" value="60000"/> 26 <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/> 27 </quartz>
複製程式碼

在global.asax.cs裡新增呼叫和取消呼叫的程式碼

複製程式碼
1         protected void Application_Start()
2         {
3            WriteLogScheduler.Instance.Start();
4         }
5 
6         protected void Application_End(object sender, EventArgs e)
7         {
8             WriteLogScheduler.Instance.Stop();
9         }
複製程式碼

所要呼叫的任務,它需要實現IJob介面

複製程式碼
 1     /// <summary>
 2     /// 要排程的功能模組
 3     /// </summary>
 4     public class WriteLogJob : IJob
 5     {
 6         public void Execute(IJobExecutionContext context)
 7         {
 8             string fileLogPath = AppDomain.CurrentDomain.BaseDirectory;
 9             string fileLogName = "TestQuartz_" + DateTime.Now.ToLongDateString() + "_log.txt";
10             FileInfo finfo = new FileInfo(fileLogPath + fileLogName);
11             using (FileStream fs = finfo.OpenWrite())
12             {
13                 //根據上面建立的檔案流建立寫資料流 
14                 StreamWriter strwriter = new StreamWriter(fs);
15                 //設定寫資料流的起始位置為檔案流的末尾 
16                 strwriter.BaseStream.Seek(0, SeekOrigin.End);
17                 //寫入相關記錄資訊
18                 strwriter.WriteLine("發生時間: " + DateTime.Now.ToString());
19                 strwriter.WriteLine("---------------------------------------------");
20                 strwriter.WriteLine();
21                 //清空緩衝區內容,並把緩衝區內容寫入基礎流 
22                 strwriter.Flush();
23                 strwriter.Close();
24                 fs.Close();
25             }
26         }
27 
28     }
複製程式碼

新增呼叫任務的程式碼,Quartz服務核心程式碼

複製程式碼
 1  public class WriteLogScheduler
 2     {
 3 
 4         static ISchedulerFactory _sf = new StdSchedulerFactory();
 5         static IScheduler _sched = _sf.GetScheduler();
 6         static WriteLogScheduler _instance = null;
 7         static object lockObj = new object();
 8 
 9         /// <summary>
10         /// 執行緒安全的單例物件
11         /// </summary>
12         public static WriteLogScheduler Instance
13         {
14             get
15             {
16                 if (_instance == null)
17                 {
18                     lock (lockObj)
19                     {
20                         if (_instance == null)
21                         {
22                             _instance = new WriteLogScheduler();
23                         }
24                     }
25                 }
26                 return _instance;
27             }
28         }
29 
30         public void Start()
31         {
32             ILog log = LogManager.GetLogger(typeof(WriteLogScheduler));
33             DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
34             // define the job and tie it to our HelloJob class
35             IJobDetail job = JobBuilder.Create<WriteLogJob>()
36                 .WithIdentity("job1", "group1")
37                 .Build();
38             // Trigger the job to run on the next round minute
39             ITrigger trigger = TriggerBuilder.Create()
40                 .WithIdentity("trigger1", "group1")
41                 .StartAt(runTime)
42                 .Build();
43             // Tell quartz to schedule the job using our trigger
44             _sched.ScheduleJob(job, trigger);
45             _sched.Start();
46         }
47         public void Stop()
48         {
49             _sched.Shutdown(true);
50         }
51 
52     }
複製程式碼

執行程式,即可看到結果了,下一講,我將把XML配置資訊加進來,以減少程式的鬆耦性。

相關推薦

任務排程~Quartz.net實現簡單任務除錯

任務排程類似於sqlserver中的作業,即按週期性執行某個程式,程式碼段,或者某種服務,在JAVA環境中出現了Quartz,它可以簡單的實現任務的除錯,而像lucene一樣,它會有對於的.net版本,Quartz.net,今天我們來做一個簡單的實驗,其時很簡單的實驗: 環境:.net4.0+mvc3 功能

任務排程quartz(二)一個簡單排程平臺的實現

奮戰了幾個大概三個星期,終於實現了一個簡單的排程平臺。不過完全憑自己的個人能力是不可能完成的,筆者是參照公司的專案,學習其中的思想和技術。然後,再融入自己的一點想法,加以改造,就實現了一個比較簡單的排程平臺,同時也非常佩服這些有想法的技術牛人。 首先,來看看一

RDIFramework.NET框架基於Quartz.Net實現任務排程詳解及效果展示

在上一篇Quartz.Net實現作業定時排程詳解,我們通過例項程式碼詳細講解與演示了基於Quartz.NET開發的詳細方法。本篇我們主要講述基於RDIFramework.NET框架整合Quartz.NET,以實現任務排程,並對任務持久化操作的全過程。本文主要通過以下幾個方面講解: 1、任務排程概述 2

C#基於Quartz.NET實現任務排程並部署Windows服務

一、Quartz.NET介紹 Quartz.NET是一個強大、開源、輕量的作業排程框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改寫,可用於winform和asp.net mvc、.Net Core應用中。它靈活而不復雜。你能夠用它來為執行一個作業而建立簡單的或複雜的作業

Topshelf結合Quartz.NET實現服務端定時調度任務

param eve basedir 定時 鏈接庫 uninstall for 技術 編寫 這周接受到一個新的需求:一天內分時間段定時輪詢一個第三方WebAPI,並保存第三方WebAPI結果。 需求分析:分時段、定時開啟、定時結束、輪詢。主要工作集中在前三個上,輪詢其實就是

spring boot 2.0 quartz 輕鬆實現定時任務和作業排程

    最近在做一個彩票相關的專案,主要涉及到不定時開獎,不定時封盤,原本打算使用spring boot 自帶的Schedule進行這一系列的工作,由於不能自動的新增定時任務,所以使用quartz,spring boot 2.0集成了quartz,所以決定嘗試下quartz用

使用quartz+spring實現簡單的可配置化的定時任務(可和資料庫配套使用)

需要的jar包: spring-context-support-4.0.1.RELEASE.jar quartz-2.2.1.jar 首先定義一個job要實現Job介面,以後各種各樣的任務都放在這個job中執行: import org.quartz.Job; import

Spring+Quartz框架實現定時任務(集群,分布式)

log cor alt 放置 這一 表達 mod 建數據庫 strac 1、定時任務的必要性:定時任務在應用中的重要性不言而喻,大多是應用,特別是金融應用更是離不開定時任務,能用定時任務來處理異常訂單,完成跑批,定時活動(雙11)等。在初期應用的訪問量並不是那麽大,

Spring整合Quartz框架實現定時任務跑批(Maven完整版)

觸發器 delay cut www 方法 lin job 定時任務 任務調度 Quartz 介紹Quartz is a full-featured, open source job scheduling service that can be integrated with

基於Quartz.net的遠端任務管理系統 二

緊接著上一篇。上一篇講了表設計與ADO.Net基本操作。接下來,就來說說怎麼動態來新增Job任務及清理過期任務吧。 首先,先理一下思路,做事情要先把思緒理清了,然後下手就快準狠了。下面是我的思路:做一個定時任務去檢查任務表(job_info)中的所有Job,如果在Schedule中不存在的,則新增進來;

基於Quartz.net的遠端任務管理系統 三

  在上一篇中,已經把服務端都做好了。那接下來就是Web的管理端了,因為很多時候伺服器是有專門的運維來管理的,我們沒有許可權去操作,所以有個可以管理Job的工具還是很有必要的。 Web管理端,我選擇現在很成熟的asp.net MVC來做,因為相信大家對於這個已經非常的熟悉了,這樣上手比較快。

SpringBoot+Quartz學習實現定時任務控制Trigger的增加、啟用、刪除、休眠

SpringBoot+Quartz學習實現定時任務控制Trigger的增加、啟用、刪除、休眠 標籤(空格分隔): SpringBoot Quartz 文章目錄 SpringBoot+Quartz學習實現定時任務控制Trigger的增加、啟用、刪除、休眠

spring定時任務排程quartz

1.maven依賴 <!-- 定時任務 --> <dependency> <groupId>quartz</groupId> <artifactId>quartz</artifactId> <v

Quartz任務排程框架(啟動定時任務框架)

Quartz任務排程框架(啟動定時任務框架) Quartz是OpenSymphony開源組織在Jobscheduling領域又一個開源專案,它可以與J2EE與J2SE應用程式相結合也可以單獨使用。Quartz可以用來建立簡單或為執行十個,百個,甚至是好幾萬個Jobs這樣複雜的

基於Quartz.net的遠端任務管理系統-起緒

Quartz.net這一個任務排程框架,相信大部分的開發者都非常的熟悉了。 往往在一個專案之中,我們會有很多的定時任務,加之多人蔘與編碼,難免會有些難於管理等問題。為統一編寫規範,以及對定時任務的管理,故開發了這一套任務管理系統以供使用。 話不多說,先來看看整體框架吧。如右圖。任務服務以WinServer為依

基於Quartz.net的遠端任務管理系統 一

在上一篇緒中,已經介紹了整個專案的情況下了,接下來就是開始一步步做起來了。 首先:先整個我們的Job任務表,以及Job執行日誌表。SQL如下: 1 drop table if exists job_info; 2 create table job_info 3 ( 4 id int not

TopShelf+Quartz.net實現window定時排程服務

1、新建控制檯應用,通過nuget安裝Quartz和topshelf、log4net Install-Package Quartz Install-Package Common.Logging Install-Package log4net Install

Spring 3整合Quartz 2實現定時任務三:動態暫停 恢復 修改和刪除任務

前面我們已經完成了spring 3和quartz 2的整合以及動態新增定時任務,我們接著來完善它,使之能支援更多的操作,例如暫停、恢復、修改等。 在動態新增定時任務中其實已經涉及到了其中的一些程式碼,這裡我們再來細化的理一理。先來看一下我們初步要實現的目標效果圖,這裡

spring quartz動態實現任務的增刪改查(可傳引數)

        上一篇文章寫到了關於定時任務的動態實現,在一些情況下,我們可能需要傳引數來實現定時任務,直接貼程式碼了QuartzParamUtils,核心類package com.thinkgem.jeesite.modules.task.quartz.param; im

[譯]Java定時任務排程-Quartz文件(九)Job Stores

JobStore主要是追蹤排程過程中所有的資料,包括jobs、triggers、calendars等等。為Quartz Scheduler選擇合適的JobStore是很重要的。幸運的是,一旦瞭解了JobStore的區別,這是一件很簡單的事。一般在Schedule