定时调度插件------FluentScheduler
定时调度插件------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
官方例子
最简洁代码
// 初始化
JobManager.Initialize();
// 添加调度任务
JobManager.AddJob(
// 调度业务
() => Console.WriteLine("5 minutes just passed."),
// 触发时间
s => s.ToRunEvery(5).Minutes()
);
// 立即停止
JobManager.Stop();
// 在任务完成后等待或者停止
JobManager.StopAndBlock();
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();
事件监听
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的更多相关文章
- SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 服务整合 2.背景 在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调 ...
- java定时调度器解决方案分类及特性介绍
什么是定时调度器? 我们知道程序的运行要么是由事件触发的,而这种事件的触发源头往往是用户通过ui交互操作层层传递过来的:但是我们知道还有另外一种由机器系统时间触发的程序运行场景.大家想想是否遇到或者听 ...
- Quartz定时调度框架
Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...
- Spring Quartz定时调度任务配置
applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...
- 定时调度框架Quartz随笔
最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...
- wordpress自动批量定时发布插件 DX-auto-publish
DX-auto-publish是一款wordpress自动发布插件,方便实用. 该wordpress插件的主要功能如下: 1.能够自动批量定时发布wordpress站点的草稿文章,无需每篇文章都手动设 ...
- crontab 定时调度
crontab -e */1 8-23 * * * /www/target/sh/myorder.sh & 0 1 * * * /www/target/php/sh/mymoney.sh &a ...
- java 多线程——quartz 定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- java 多线程——一个定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- linux定时调度器每秒运行一次
linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...
随机推荐
- 从BeanFactory源码看Bean的生命周期
下图是我搜索"Spring Bean生命周期"找到的图片,来自文章--Spring Bean的生命周期 下面,我们从AbstractAutowireCapableBeanFacto ...
- P6492 STEP(线段树维护左右区间pushup)
题目链接 题目描述: 给定一个长度为\(~\)n\(~\)的字符序列\(~\)a,初始时序列中全部都是字符\(~\)L. 有\(~\)q\(~\)次修改,每次给定一个\(~\)x,做出如下变化: \( ...
- fastposter v2.10.0 简单易用的海报生成器
fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像)即可生成海报. 点击代码直接生成各种语言的调用代码,方便快速开发. 现已服务众 ...
- 如何通过Java导出带格式的 Excel 数据到 Word 表格
在Word中制作报表时,我们经常需要将Excel中的数据复制粘贴到Word中,这样则可以直接在Word文档中查看数据而无需打开另一个Excel文件.但是如果表格比较长,内容就会存在一定程度的丢失,无法 ...
- 学习ASP.NET Core Blazor编程系列十——路由(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- Android Studio运行Failed to find Build Tools revision 30.0.3
问题 第一次安装好Android Studio2022.5的版本之后开启虚拟机运行文件报错提示 Failed to find Build Tools revision 30.0.3 打开SDK已经安装 ...
- ArcGIS QGIS学习二:图层如何只显示需要的部分几何面数据(附最新坐标边界下载全国省市区县乡镇)
目录 前言 准备SHP数据 ArcMap 的筛选 QGIS 的筛选 如何编写查询条件 前言 当我们用GIS软件打开一个SHP文件的时候,会显示出里面全部的几何图形,假如我只想要其中的一部分数据显示出来 ...
- 14 STL-常用算法
重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧! 写在前面,本篇章主要介绍STL中常用算法. 算法主要由 ...
- day12 多线程1.进程与线程 & 2.线程生命周期 & 3.线程同步机制
day12 bigDecimal,用于计算钱的数据类型 多线程 线程与进程 进程 1)执行中的应用程序 2)一个进程可以包含一个或者多个线程 3)一个进程至少要包含一个线程(如main方法) 线程 线 ...
- js逆向之补环境常用代码
//第一种 补环境的方法 let test1 = { name:"小红" }; test = new Proxy(test1,{ get(target,key){ console. ...