zoukankan      html  css  js  c++  java
  • 利用 FluentScheduler 启动定时器计划任务

    FluentScheduler 是什么?

    Automated job scheduler with fluent interface.

    这是作者在 Github 上的介绍,就是一个定时任务管理器。在 .Net 下类似的有微软的 Timer 、 Quartz.NET 、 FluentScheduler 以及Windows服务等,关于 Quartz.NET 的使用几乎和 Java 下的 Quartz 没什么区别。

    定时任务或者说作业调度,可能也只有在你指定一个时间做统计、发邮件或者一些你想完成的业务逻辑时有用,这也是它出现的目的。

    如何使用 FluentScheduler ?

    我是推荐你去作者的 Github 去看看源码或例子,地址: https://github.com/fluentscheduler/FluentScheduler
    当然,这里我用作者的例子做了演示和翻译,保证谁都能看的懂。

    一、安装FluentScheduler程序包
    打开程序包管理控制台,输入Install-Package FluentScheduler即可。步骤:状态栏选择 工具 - 库程序包管理器 - 程序包管理控制台,如下图:

    输入Install-Package FluentScheduler

    二、写代码
    我这里只简单贴一下作者的示例代码,更推荐你去 Github 看,但我随手翻译了一下,或许更容易阅读一些。

    public class Demo : Registry
    {
        public Demo()
        {
            // Schedule an IJob to run at an interval
            // 立即执行每两秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)
            Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds();
     
            // Schedule an IJob to run once, delayed by a specific time interval
            // 延迟一个指定时间间隔执行一次计划任务。(当然,这个间隔依然可以是秒、分、时、天、月、年等。)
            Schedule<MyJob>().ToRunOnceIn(5).Seconds();
     
            // Schedule a simple job to run at a specific time
            // 在一个指定时间执行计划任务(最常用。这里是在每天的下午 1:10 分执行)
            Schedule(() => Trace.WriteLine("It's 1:10 PM now.")).ToRunEvery(1).Days().At(13, 10);
     
            Schedule(() => {
     
                // 做你想做的事儿。
                Trace.WriteLine("It's 1:10 PM now.");
     
            }).ToRunEvery(1).Days().At(13, 10);
     
            // Schedule a more complex action to run immediately and on an monthly interval
            // 立即执行一个在每月的星期一 3:00 的计划任务(可以看出来这个一个比较复杂点的时间,它意思是它也能做到!)
            Schedule<MyComplexJob>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);
     
            // Schedule multiple jobs to be run in a single schedule
            // 在同一个计划中执行两个(多个)任务
            Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes();
     
        }
     
     
    }
     
    public class MyJob : IJob
    {
     
        void IJob.Execute()
        {
            Trace.WriteLine("现在时间是:"+DateTime.Now);
        }
    }
     
    public class MyOtherJob : IJob
    {
     
        void IJob.Execute()
        {
            Trace.WriteLine("这是另一个 Job ,现在时间是:" + DateTime.Now);
        }
    }
     
    public class MyComplexJob : IJob
    {
     
        void IJob.Execute()
        {
            Trace.WriteLine("这是比较复杂的 Job ,现在时间是:" + DateTime.Now);
        }
    }

    三、初始化

    .net framework在Global.asax中加入一句

    JobManager.Initialize(new Demo());

    .net core需要配置在Startup.css中

        public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc();
                //开启定时器
                JobManager.Initialize(new MyFluentScheduler());
            }

    上面是简单的使用,其实已经足够了,当然还有更多变态的需求,作者也在文档里写了,比如这个:你想执行一个计划任务,每周一 14:00 运行。但现在是星期一上午 10:00 ,那你的程序应该在今天运行还是在下周星期一?这里用到了 ToRunEvery
    还有并发任务的处理,有兴趣可以去看看。

    总结一下

    FluentScheduler 是 .Net 下,可以让你轻松实现定时任务的工具,不需要再去写Windows服务了,更重要的是时间设置起来灵活很多,定时任务难点不就是在这么。

  • 相关阅读:
    MSF进程迁移
    中间件漏洞之Nginx
    MSF常用payload生成
    消息中间件的对比
    Jetty简介
    Java中集合转数组,数组转集合
    SpringCloud简介
    码云上添加ssh密匙
    在Dubbo中使用高效的Java序列化(Kryo和FST)
    dubbo-负载均衡
  • 原文地址:https://www.cnblogs.com/yechangzhong-826217795/p/9577762.html
Copyright © 2011-2022 走看看