定时调度插件------FluentScheduler

源码地址

官网文档地址

使用说明

dll引用

  • 文章使用的版本为5.5.1版本
  • 使用GuGet搜索FluentScheduler即可找到
    • 如果框架为.NET Framework4.5+,.NET Core 1.0+或.NET5.0+,可使用5.5.1最新版本
    • 如果框架为.NET Framework4.0,则需要降低版本,下载5.3.0版本
  • 源代码编译
    • 源代码共三个项目,其中直接编译FluentScheduler即可,无需多余操作

官方说明

  • 该组件不支持100ms以下的时间间隔

  • 官方不建议使用:IJobFactory

  • 不支持Cron

官方例子

  1. 最简洁代码

    // 初始化
    JobManager.Initialize();
    // 添加调度任务
    JobManager.AddJob(
    // 调度业务
    () => Console.WriteLine("5 minutes just passed."),
    // 触发时间
    s => s.ToRunEvery(5).Minutes()
    );
    // 立即停止
    JobManager.Stop();
    // 在任务完成后等待或者停止
    JobManager.StopAndBlock();
  2. Schedules 自定义调度任务

    FluentScheduler支持自定义Schedules,相当于在初始化的时候可以自定义很多调度任务,在程序运行时可根据实际业务情况移除特定任务或增加任务。

    • JobManager.Initialize(new MyRegistry()); //调度任务初始化

    • Registry直接添加任务

      // 声明一个Registry类
      var registry = new Registry();
      // 每天21点15分执行一次
      registry.Schedule(() => Console.WriteLine("It's 9:15 PM now.")).ToRunEvery(1).Days().At(21, 15);
      // 创建了一个叫"NonReentrant"的任务,在1秒后执行休眠1分钟,不重复(NonReentrant方法)
      registry.Schedule(() => Sleep(TimeSpan.FromMinutes(1)).NonReentrant().WithName("NonReentrant").ToRunEvery(1).Seconds(); //调度任务初始化
      JobManager.Initialize(registry);
    • 自定义调度任务:继承Registry类

      // MyRegistry.cs
      public class MyRegistry : Registry
      {
      public MyRegistry()
      {
      // 让所有任务都不重复执行
      NonReentrantAsDefault();
      // 每天21点15分执行一次
      Schedule(() => Console.WriteLine("It's 9:15 PM now.")).ToRunEvery(1).Days().At(21, 15);
      // 创建了一个叫"NonReentrant"的任务,在1秒后执行休眠1分钟,不重复(NonReentrant方法)
      Schedule(() => Sleep(TimeSpan.FromMinutes(1)).NonReentrant().WithName("NonReentrant").ToRunEvery(1).Seconds();
      // 创建了一个叫“Reentrant”的任务,马上执行,且每隔1分钟就执行休眠3分钟的指令
      Schedule(() =>
      {
      Sleep(TimeSpan.FromMinutes(3));
      }).WithName("Reentrant").ToRunNow().AndEvery(1).Minutes();
      // 创建了一个叫“Disable”的任务,该任务200秒后执行一次
      Schedule(() =>
      {
      Sleep(TimeSpan.FromMinutes(3));
      }).WithName("Disable").ToRunOnceIn(200).Seconds();
      // 创建了一个叫“FiveMinutes”的任务,该任务在5分钟后开始执行,并且每个10分钟继续执行
      Schedule(() => Sleep(TimeSpan.FromMinutes(3))).WithName("FiveMinutes").ToRunOnceAt(DateTime.Now.AddMinutes(5)).AndEvery(10).Minutes();
      // 创建了一个叫“Weeks”的任务,每周执行一次
      Schedule(() => Sleep(TimeSpan.FromMinutes(3))).WithName("Weeks").ToRunEvery(1).Weeks();
      // 通过Weeks方法,依此类推还有 Weekdays()-每周工作日提醒 Days():每天提醒 Hours():每小时提醒
      }
      } //主函数中调用
      JobManager.Initialize(new MyRegistry());
    • 自定义计划任务:通过继承IJob接口并实现Execute方法

      //ParameterJob.cs
      //实现IJob接口
      public class WriteLineJob : IJob
      {
      public string Parameter { get; set; }
      // 任务实际触发方法
      public void Execute() => System.Console.WriteLine($"调入参数:{Parameter}");
      }
      public class DisposableJob : IJob, IDisposable
      {
      // 任务实际触发方法
      public void Execute() => Logger.Information("Disposable: executing");
      // 销毁时触发的方法
      public void Dispose() => Logger.Information("Disposable: disposed");
      }
      // MyRegistry.cs
      // 将WriteLineJob加入到调度任务类中
      // 直接new一个WriteLineJob并赋值,然后10s后调用
      Schedule(new WriteLineJob{ Parameter = "Foo" }).WithName("Parameter").ToRunOnceIn(10).Seconds();
      // 也是10s后运行,运行完成后会执行Dispose方法
      Schedule<DisposableJob>().WithName("Disposable").ToRunOnceIn(10).Seconds();
  3. 事件监听

    FluentScheduler支持三种事件,分别为任务开始,任务结束和任务异常

    // 抛出异常时触发
    // info为JobExceptionInfo类,Name:任务名称;Exception:触发的异常类
    JobManager.JobException += info => System.Console.WriteLine($"异常信息:{info.Exception}");
    // 任务开始时触发
    // info为JobStartInfo类,Name:任务名称;StartTime:开始时间
    JobManager.JobStart += info => System.Console.WriteLine($"任务{info.Name}开始执行");
    // 任务完成后触发
    // info为JobEndInfo类,Name:任务名称;StartTime:开始时间;NextRun:下次执行时间;Duration:该任务持续时间
    JobManager.JobEnd += info => System.Console.WriteLine($"任务{info.Name}开始执结束,持续时间:{info.Duration}");

定时调度插件------FluentScheduler的更多相关文章

  1. SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 服务整合 2.背景 在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调 ...

  2. java定时调度器解决方案分类及特性介绍

    什么是定时调度器? 我们知道程序的运行要么是由事件触发的,而这种事件的触发源头往往是用户通过ui交互操作层层传递过来的:但是我们知道还有另外一种由机器系统时间触发的程序运行场景.大家想想是否遇到或者听 ...

  3. Quartz定时调度框架

    Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...

  4. Spring Quartz定时调度任务配置

    applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...

  5. 定时调度框架Quartz随笔

    最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...

  6. wordpress自动批量定时发布插件 DX-auto-publish

    DX-auto-publish是一款wordpress自动发布插件,方便实用. 该wordpress插件的主要功能如下: 1.能够自动批量定时发布wordpress站点的草稿文章,无需每篇文章都手动设 ...

  7. crontab 定时调度

    crontab -e */1 8-23 * * * /www/target/sh/myorder.sh & 0 1 * * * /www/target/php/sh/mymoney.sh &a ...

  8. java 多线程——quartz 定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  9. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  10. linux定时调度器每秒运行一次

    linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...

随机推荐

  1. Git配置和使用?Git你真的会用么?Git与SVN的主要区别

    1.Git环境配置    在学习Git之前,首先要知道什么是版本控制 1.1 版本控制:版本迭代.新的版本!版本管理器 版本控制是开发过程中用于管理我们的文件.目录或工程内容的修改内容,查看修改历史记 ...

  2. elasticsearch聚合之bucket terms聚合

    目录 1. 背景 2. 前置条件 2.1 创建索引 2.2 准备数据 3. 各种聚合 3.1 统计人数最多的2个省 3.1.1 dsl 3.1.2 运行结果 3.2 统计人数最少的2个省 3.2.1 ...

  3. 打不开 github 的方法与推荐基于Vue3与Element plus的后台管理系统

    一.打不开 github 的方法 1.打开本机 hosts 文件(C:\Windows\System32\drivers\etc) 2.然后在 hosts 文件里的末尾放入一下两个 IP 地址: # ...

  4. winform datagridview行头添加序号

    1.使用datagirdview的RowPostPaint事件 2.datagirdview命名为dgv.(当然这个名字随意,开心就好) 3.贴代码 private void dgv_RowPostP ...

  5. 关于解决Failed on cp file to /system - Cross-device link 报错

    前言 在adb shell中移动 android_server时候遇到了这个报错 解决办法 采用 cp 命令代替 mv 命令

  6. 【实战】Hadoop安装01-伪分布式-Pseudo

    Hadoop安装-伪分布式-Pseudo 〇.所需资料 一.前置环境安装 1.包含内容 (1)安装 虚拟机安装.系统安装 (2)配置 ip.host.主机名配置 关闭防火墙及selinux SSH免密 ...

  7. 【实时数仓】Day02-DWD、DIM层数据准备:各层职能、行为日志DWD层、业务日志DWD层及分流(Phoenix和HBASE)

    一.需求分析及实现思路 1.分层需求 建立数仓目的:增加数据计算的复用性 可以从半成品继续加工而成 从kafka的ODS层(数据一开始就读到了kafka)读用户行为数据和业务数据,并写回到kafka的 ...

  8. MYSQL-INNODB索引构成详解

    作者:郑啟龙 摘要: 对于MYSQL的INNODB存储引擎的索引,大家是不陌生的,都能想到是 B+树结构,可以加速SQL查询.但对于B+树索引,它到底"长"得什么样子,它具体如何由 ...

  9. SpringBoot内置tomcat启动过程及原理

    作者:李岩科 1 背景 SpringBoot 是一个框架,一种全新的编程规范,他的产生简化了框架的使用,同时也提供了很多便捷的功能,比如内置 tomcat 就是其中一项,他让我们省去了搭建 tomca ...

  10. 简易博客页面小项目 html css

    项目预览 代码 html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...