當前位置:
首頁 > 知識 > Quartz.net 定時任務之簡單任務

Quartz.net 定時任務之簡單任務

一、概述

1、quartz.net 是一款從java quartz 上延伸出來的定時任務框架。

2、我在網上看到很多大神寫過關於quartz.net 的博客、文章等,在這些博客文章里也學會了很多關於quartz的知識。今天博主也想寫一篇關於quartz的文章(不足之處望大神斧正),希望能幫助正在學習quartz路上的兄弟姐妹,順便也鞏固自己。

3、quartz這篇博客會從最基礎的開始,之後會逐漸的升級,如果有喜歡的兄弟姐妹,請關注我的博客,博主會持續更新

二、搭建

1、打開vs創建新的mvc空項目,取名:QuartzMVC 如圖

Quartz.net 定時任務之簡單任務

2、完成上一步,接下來我們安裝quart

(1)打開vs 工具-->庫程序包管理器-->程序包管理台 打開程序包管理台之後 輸入

Quartz.net 定時任務之簡單任務

(2)安裝成功之後,你會看見項目里多了一個 job_scheduling_data_2_0.xsd文件(無需理會)

Quartz.net 定時任務之簡單任務

3、同第2步,我們相繼安裝 log4net.dll 、 Common.Logging.dll 、Common.Logging.Core.dll 3個日誌工具

(1)安裝好如下圖

Quartz.net 定時任務之簡單任務

4、配置web.config,添加日誌輸出路徑 如圖

Quartz.net 定時任務之簡單任務

三、代碼

1、添加一個控制器取名Home

(1)在Home控制器里添加一個視圖Index

(2)在QuartzMVC項目下建立日誌工具類 取名:LogTool 並編寫如下代碼

1 public static void DetailLogRecord(string type, LogTool.FolderCreationType folderCrationType, string content, bool isErasable, string filename = null)
2 {
3 string folderPrefixPath = (System.Configuration.ConfigurationManager.AppSettings["localLogPath"] ?? "c:\test_log_tem") + "" + type;
4 string folderPath = "";
5 try
6 {
7 switch (folderCrationType)
8 {
9 default: folderPath = folderPrefixPath; break;
10 }
11 if (!Directory.Exists(folderPath))
12 {
13 Directory.CreateDirectory(folderPath);
14 }
15 string filePath = folderPath + "" + (filename ?? DateTime.Now.ToString("yyyyMMdd")) + ".log";
16 content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " :
" + content + "
";
17 if (isErasable) LogTool.RecordNewFileLog(filePath, content);
18 else LogTool.RecordConsecutiveLog(filePath, content);
19 }
20 catch
21 {
22 throw;
23 }
24
25 }
26
27
28 public enum FolderCreationType
29 {
30 None
31 }
32
33 private static void RecordConsecutiveLog(string filePhysicalUrl, string pursuitContent)
34 {
35 System.IO.FileStream fs = new System.IO.FileStream(filePhysicalUrl, FileMode.OpenOrCreate, FileAccess.Write);
36 System.IO.StreamWriter m_streamWriter = new System.IO.StreamWriter(fs);
37 m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
38
39 string resultStr = Environment.NewLine + pursuitContent;
40
41 m_streamWriter.WriteLine(resultStr);
42 m_streamWriter.Flush;
43 m_streamWriter.Close;
44 fs.Close;
45 }
46
47 private static void RecordNewFileLog(string filePhysicalUrl, string content)
48 {
49 System.IO.StreamWriter sw = new System.IO.StreamWriter(filePhysicalUrl);
50 sw.WriteLine(content);
51 sw.Close;
52 }
53
54 private static void CreateFolder(string url)
55 {
56 if (Directory.Exists((url)) == false)
57 {
58 Directory.CreateDirectory((url));
59 }
60 }

View Code

(3)打開視圖Index添加如下代碼

1 @using (Html.BeginForm("FirstQuartz", "Home", FormMethod.Post))
2 {
3
4 }

View Code

(4)在QuartzMVC項目下的Model 文件夾下建立JobClass類並繼承IJob介面 代碼如下

1 public class JobClass:IJob
2 {
3 //日誌
4 private static ILog _log = LogManager.GetLogger(typeof(JobClass));
5
6 ///

7 /// 構造方法
8 ///

9 public JobClass
10 { }
11 ///

12 /// 作業默認介面
13 ///

14 /// 15 public void Execute(IJobExecutionContext context)
16 {
17 LogTool.DetailLogRecord("a", LogTool.FolderCreationType.None, "我的第一個任務", false);
18 }
19 }

View Code

(5)打開Home控制器添加方法「FirstQuartz」如下代碼

1 public void FirstQuartz
2 {
3 StdSchedulerFactory schedulerFactory = new StdSchedulerFactory;
4 //得到調度
5 IScheduler sched = schedulerFactory.GetScheduler;
6 //構造一個調度工廠
7 LogTool.DetailLogRecord("a", LogTool.FolderCreationType.None, "創建調度器成功", false);
8 sched.Start;
9
10 IJobDetail job = JobBuilder.Create
11 .WithIdentity("作業名稱", "作業分組")
12 .Build;
13 // 觸發作業
14 ITrigger trigger = TriggerBuilder.Create
15
16 #region 使用 時間間隔 先不介紹
17 //.WithIdentity("myTrigger", "group1")
18 //.StartNow
19 //.WithSimpleSchedule(x => x
20 // .WithIntervalInSeconds(5)
21 // .RepeatForever)
22 //.Build;
23 #endregion
24
25 #region 使用cron 規則
26
27 .WithIdentity("觸發器名稱", "觸發器分組")
28 .WithCronSchedule("/5 * * ? * *") // 每隔五秒執行一次 這個表達式我們將在下一篇介紹
29 .StartAt(DateTime.UtcNow)
30 .WithPriority(1)
31 .Build;
32 #endregion
33 // 將作業和觸發器添加到調度器
34 sched.ScheduleJob(job, trigger);
35
36 // 2天後關閉作業調度 定時關閉任務實例
37 //Thread.Sleep(TimeSpan.FromDays(2));
38
39 // _sched.Shutdown; // 結束
40 }

View Code

(5)到這裡我們的第一個簡單的quartz任務就搭建完成。

2、這裡只寫了開啟任務的方法,沒有寫關閉的方法,如果需要可以自由添加

(1)關閉方法為 _sched.Shutdown,在開啟方法里最後注釋了,讀者可以單獨分離出來

四、測試

1、運行項目會看到 如下圖頁面

Quartz.net 定時任務之簡單任務

(1)點擊按鈕開啟任務

(2)打開本地磁碟e 你會看到一個文件夾QuartzLog裡面有一個日誌文件就是你的任務記錄 如圖

Quartz.net 定時任務之簡單任務

五、源碼及說明

1、源碼地址:http://git.oschina.net/yangguangchenjie/quartzmvc

2、如果喜歡我的文章請點關注O(∩_∩)O~~ ,有問題留言哦

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

jmeter IP欺騙功能實現
演算法系列「希爾排序」篇
Oracle 12C 新特性之 恢復表
WBS任務分解中前置任務閉環迴路檢測:有向圖的簡單應用(C)
前台通用控制頁碼顯示的JS代碼

TAG:科技優家 |

您可能感興趣

springboot之定時任務
linux刪除shell和定時任務
spring 定時任務job(quartz)可視化
celery4+django2定時任務
Spring Cloud Stream 使用延遲消息實現定時任務(RabbitMQ)
開源定時任務框架Quartz
Linux下的計劃任務-crontab
使用 anacron 定期執行任務
SpringBoot如何整合定時任務調度
使用 Calcurse 在 Linux 命令行中組織任務
Chromium版Microsoft Edge現在可以將網站固定到任務欄
Windows創建計劃任務定時執行Python腳本
Spring 定時任務Scheduled 開發詳細圖文
【Modular Multi-Mission Aircraft】空客A320neo模塊化多任務解決方案
PTC發布Vuforia Expert Capture AR,幫助工廠人員快速準確完成任務
Google Assistant登陸iPad平板:支持多任務模式
Windows10上純粹的任務欄透明軟體——TranslucentTB
Windows10 任務欄
蘋果MacBook Pro Touch Bar用上Windows 10任務欄
在 Django中使用 Redis和Celery處理非同步任務