zoukankan      html  css  js  c++  java
  • Cron任务调度CronNET

    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任务,我添加了一个每分钟执行的任务,任务的内容就是打印个日志。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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来完成。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    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安装即可:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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

  • 相关阅读:
    RDD(弹性分布式数据集)的分析
    Spark 开发环境搭建
    本地yum仓库的配置安装
    Java使用PDFBox操作PDF文件获取页码、文章内容、缩略图
    利用bdb实现持久化队列
    SQL查询重复记录
    SQL删除某个时间段的数据
    JAVA文件读取和解析
    多线程
    DOC解析xml
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/8578248.html
Copyright © 2011-2022 走看看