NET平台開源項目之Cron任務調度CronNET
來源:數據之巔
cnblogs.com/asxinyu/p/dotnet_Opensource
Quartznet大名鼎鼎應該很少有人不知道,相關的開源項目很多,不過那東東對新手來說,有點晦澀,加上哪個Cron表達式,可能一進去雲里霧裡的。
今天給大家介紹一個簡單的在.NET平台上運行Cron計劃任務的組件CronNET。同時也給大家推介幾個Cron表達式的工具。
一、Cron介紹和工具
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。cron伺服器可以根據配置文件約定的時間來執行特定的作務。
所以其他組件和平台根據其語法做了支持,就有了各種各樣的語言版本。
Cron的語法表達式非常靈活,也非常複雜,不過不建議大家一次性擼進去出不來,需要用到的時候用下面幾個工具查一下,生成就好。慢慢就理解了,當然簡單主要的語法看得懂就行,抄來抄去就會了。
如果要了解Cron語法,可以看下面這篇文章,非常簡潔和全面:Cron表達式。
下面給大家介紹2個好用的Cron工具:
2、Cron表達式解析組件:https://github.com/bradymholt/cron-expression-descriptor,可以將Cron表達的轉換為自然語言,支持很多語言,包括中文。、
二、CronNET介紹和使用
CronNET是一個簡單的C#類庫,用來執行Cron表達式定義的計劃任務。它支持絕大部分Cron表達式,看測試下面的代碼,非常全面了。而且整個下面短小精悍,總過不過110行代碼。所以集成到自己的項目中去也非常容易。
Github地址:https://github.com/kevincolyar/CronNET
下面我們通過一段簡單的代碼來看看效果和使用。自己下面源代碼編譯dll,引用命名空間 using CronNET
2.1 基本使用
定義一個全局的CronDaemon對象,用來存儲Job,在main函數中添加cron任務,我添加了一個每分鐘執行的任務,任務的內容就是列印個日誌。
private static CronDaemon cron_daemon = new CronDaemon();
static void Main(string[] args)
{
cron_daemon.AddJob("* * * * *", MiniteTask);
Console.WriteLine("任務開始時間:", DateTime.Now.ToLongTimeString());
cron_daemon.Start();
while (true) Thread.Sleep(6000);
}
static void MiniteTask()
{
Console.WriteLine(":定時任務執行",DateTime.Now.ToLongTimeString());
}
看看執行結果,每分鐘都執行了一次:
2.2 Windows服務
下面我們看看在windows服務中怎麼使用,起始原理差不多,Github裡面有一個windows服務的例子,不過我一般比較喜歡用XAgent來完成。
class MyService : AgentServiceBase
{
//Job
private static CronDaemon cron_daemon = new CronDaemon();
internal static void MiniteTask()
{
XTrace.WriteLine(":定時任務執行", DateTime.Now.ToLongTimeString());
}
public MyService()
{
//設置服務名稱和描述,以及線程數
DisplayName = "CronTestService";
Description = "CronTestService";
ThreadCount = 0;
cron_daemon.AddJob("* * * * *", MiniteTask);//添加job
}
/// 服務啟動
///
protected override void StartWork(String reason)
{
XTrace.WriteLine("任務開始時間:", DateTime.Now.ToLongTimeString());
cron_daemon.Start();//啟動
base.StartWork(reason);
}
/// 服務停止
protected override void StopWork(String reason)
{
base.StopWork(reason);
}
}
XAgent是一個快速,圖形化界面的Windows服務工具,集成在Newlife組件中。使用可以參考我的這篇博客:探索Newlife組件:服務代理利器XAgent的前世今生(http://www.cnblogs.com/asxinyu/p/3344031.html)。
下面是運行效果,結果,結果在右邊日誌文件中。
三、cron-expression-descriptor使用
cron-expression-descriptor是一個C#開發的開源Cron表達式解析器,可以將Cron表達式轉換為自然語言,支持英語/西班牙語/俄語/法語/簡體中文等語言。支持的平台有.NET Core1.0,.NET Framework 4.5和Mono 4.5。
Github地址:https://github.com/bradymholt/cron-expression-descriptor
比如我們來看幾個例子,直接在VS中使用Nuget,搜索CronExpressionDescriptor安裝即可:
static void Main(string[] args)
{
XTrace.UseConsole();
XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/6 * 1 * *",
new Options() { Locale= "zh-CN" }));
XTrace.WriteLine(ExpressionDescriptor.GetDescription("* * * 2,6 *",
new Options() { Locale = "zh-CN" }));
XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/3 12 * 1 MON-FRI",
new Options() { Locale = "zh-CN" }));
Console.ReadKey();
}
解析的內容如下,我們在選項中配置了Local="zh-CN":
注意安裝後,支持的語言資源文件都在bin目錄下,如下面就是支持的語言:
所以有了這東西,做一個在線版的Cron解析器也很easy了。。。好了,剩下的該你在業務中表演了。
四、資源
本文演示代碼下載:
CronNET.rar(https://files.cnblogs.com/files/asxinyu/CronNET.rar)
Cron表達式語法參考:
Cron表達式(http://www.cnblogs.com/zy-jiayou/p/7007303.html)
CronNET Github地址:https://github.com/kevincolyar/CronNET
Cron解析器Github地址:https://github.com/bradymholt/cron-expression-descriptor
看完本文有收穫?請轉發分享給更多人
關注「DotNet」,提升.Net技能
淘口令:複製以下紅色內容,再打開手淘即可購買
范品社,使用¥極客T恤¥搶先預覽(長按複製整段文案,打開手機淘寶即可進入活動內容)
TAG:DotNet |