zoukankan      html  css  js  c++  java
  • .NET平台开源项目速览(21)Cron任务调度CronNET

    如果用知乎,可以关注专栏:.NET开源项目PowerBI社区

    Quartznet大名鼎鼎应该很少有人不知道,相关的开源项目很多,不过那东东对新手来说,有点晦涩,加上哪个Cron表达式,可能一进去云里雾里的。今天给大家介绍一个简单的在.NET平台上运行Cron计划任务的组件CronNET。同时也给大家推介几个Cron表达式的工具。

    本文原文地址:.NET平台开源项目速览(21)Cron任务调度CronNET

    1.Cron介绍和工具

      cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。cron服务器可以根据配置文件约定的时间来执行特定的作务。所以其他组件和平台根据其语法做了支持,就有了各种各样的语言版本。Cron的语法表达式非常灵活,也非常复杂,不过不建议大家一次性撸进去出不来,需要用到的时候用下面几个工具查一下,生成就好。慢慢就理解了,当然简单主要的语法看得懂就行,抄来抄去就会了。

      如果要了解Cron语法,可以看下面这篇文章,非常简洁和全面:Cron表达式

      下面给大家介绍2个好用的Cron工具:

    1.在线Cron表达式生成器:http://cron.qqe2.com/ 。配置相当全面,可以把你想要执行的任务直接图形化界面配置出来,得到Cron表达式。也可以反解析到UI,如下图:

    2.Cron表达式解析组件:https://github.com/bradymholt/cron-expression-descriptor,可以将Cron表达的转换为自然语言,支持很多语言,包括中文。重点包括了中文

    看看第3部分我们的演示。

    2.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("任务开始时间:{0}", DateTime.Now.ToLongTimeString());
    	cron_daemon.Start();
    	while (true) Thread.Sleep(6000);
    }
    
    static void MiniteTask()
    {
    	Console.WriteLine("{0}:定时任务执行",DateTime.Now.ToLongTimeString());
    }

    看看执行结果,每分钟都执行了一次:

    2.2 Windows服务

    下面我们看看在windows服务中怎么使用,起始原理差不多,Github里面有一个windows服务的例子,不过我一般比较喜欢用XAgent来完成。

    class MyService : AgentServiceBase<MyService>
    {
    	//Job
    	private static CronDaemon cron_daemon = new CronDaemon();
    	internal static void MiniteTask()
    	{
    		XTrace.WriteLine("{0}:定时任务执行", DateTime.Now.ToLongTimeString());
    	}
    	public MyService()
    	{
    		//设置服务名称和描述,以及线程数
    		DisplayName = "CronTestService";
    		Description = "CronTestService";
    		ThreadCount = 0;
    		cron_daemon.AddJob("* * * * *", MiniteTask);//添加job
    	}
    	/// <summary>服务启动</summary>
    	/// </remarks>
    	protected override void StartWork(String reason)
    	{
    		XTrace.WriteLine("任务开始时间:{0}", DateTime.Now.ToLongTimeString());
    		cron_daemon.Start();//启动
    		base.StartWork(reason);
    	}
    	/// <summary>服务停止</summary>
    	protected override void StopWork(String reason)
    	{
    		base.StopWork(reason);
    	}
    }

    XAgent是一个快速,图形化界面的Windows服务工具,集成在Newlife组件中。使用可以参考我的这篇博客:探索Newlife组件:服务代理利器XAgent的前世今生

    下面是运行效果,结果,结果在右边日志文件中。

    3.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了。。。好了,剩下的该你在业务中表演了。 

    4.资源

    本文演示代码下载:CronNET.rar

    Cron表达式语法参考:Cron表达式

    CronNET Github地址:https://github.com/kevincolyar/CronNET

    Cron解析器Github地址:https://github.com/bradymholt/cron-expression-descriptor

  • 相关阅读:
    PHP基础学习笔记(一)
    安装wampserver之后,浏览器中输入localhost页面显示IIS7解决办法
    HTML5常识总结(一)
    AngularJs中的服务
    AngularJs中的directives(指令part1)
    Happy Number——LeetCode
    Binary Tree Zigzag Level Order Traversal——LeetCode
    Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
    Construct Binary Tree from Inorder and Postorder Traversal——LeetCode
    Convert Sorted Array to Binary Search Tree——LeetCode
  • 原文地址:https://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_CronNET.html
Copyright © 2011-2022 走看看