NETCORE - FluentScheduler定时任务
原文链接:https://www.cnblogs.com/1285026182YUAN/p/17686654.html
以前记录的是在.net framwork中的,是放在global文件中的。现在记录的是在.netcore里的应用,netcore框架里已经没有global文件了。
源码:https://github.com/fluentscheduler/FluentScheduler
项目框架:NET6 WebApi
1. 创建项目:NETCORE.FluentScheduler
添加Nuget包
FluentScheduler
2. 创建 ServiceExtensions 文件夹,创建 ServiceCollectionExtensions.cs 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using FluentScheduler; using System.Reflection; namespace NETCORE.FluentScheduler.ServiceExtensions { public static class ServiceCollectionExtensions { public static void AddFluentScheduler( this IServiceCollection services) { //扫描当前程序集中实现了Registry的类 var registrys = Assembly.GetExecutingAssembly().GetTypes() .Where(t => !t.IsInterface && !t.IsSealed && !t.IsAbstract && typeof (Registry).IsAssignableFrom(t)) .Select(s => s.Assembly.CreateInstance(s.FullName) as Registry)?.ToArray(); //注册同步服务 JobManager.Initialize(registrys); } } } |
3. 服务注册,Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 | using NETCORE.FluentScheduler.ServiceExtensions; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); //注册FluentSchedule服务 builder.Services.AddFluentScheduler(); var app = builder.Build(); |
4. 定义要执行的任务
创建Job文件夹,创建 EmailSyncJob.cs 文件
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 31 32 33 34 35 36 37 38 39 40 41 42 | using FluentScheduler; namespace NETCORE.FluentScheduler.Job { /// <summary> /// 邮件同步服务注册者(任务执行的计划策略) /// </summary> public class EmailSyncJobRegistry : Registry { public EmailSyncJobRegistry() { //不允许重复执行(每一次任务都必须执行完成后,才能开启下一次执行,防止并发执行带来的问题) NonReentrantAsDefault(); //每5秒一次循环 Schedule<EmailSyncJob>().ToRunNow().AndEvery(5).Seconds(); //每1小时一次循环 //Schedule<EmailSyncJob>().ToRunNow().AndEvery(1).Hours(); } } /// <summary> /// 邮件同步服务执行器(具体执行的任务) /// </summary> public class EmailSyncJob : IJob { public void Execute() { try { Console.WriteLine( "开始邮件数据同步服务,{0}..." , DateTime.Now); } catch (Exception ex) { Console.WriteLine( "邮件同步服务出现异常{0}..." , ex.ToString()); } finally { Console.WriteLine( "结束处理邮件同步服务..." ); Console.WriteLine(Environment.NewLine); } } } } |
5. 测试,启动服务
常用的几种作业调度计划
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 1、 立即执行每10秒一次的计划任务。(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。) Schedule().ToRunNow().AndEvery(10).Seconds(); 2、立即执行每10秒一次的计划任务。如果本次任务没有结束,下一次的任务则不会开始,禁止并行运行 Schedule().NonReentrant().ToRunNow().AndEvery(10).Seconds(); 3、在每天的21:15执行计划任务 Schedule(() => Console.WriteLine( "www.taohuayuan178.com It's 9:15 PM now." )).ToRunEvery(1).Days().At(21,15); 4、立即执行一个在每月的第一个星期一 3:00 的计划任务 Schedule(() => Console.WriteLine( "It's 3:00 AM now." )).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3,0); 5、在每周一的21:15执行计划任务 Schedule(() => Console.WriteLine( "It's 9:15 PM now." )).ToRunEvery(1).Weeks().On(DayOfWeek.Monday).At(21,15); |
分类:
.netcore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-06-28 从数据类型 varchar 转换为 numeric 时出错
2023-06-28 根据时间段计算工作日的天数(SqlServer),包含节假日的处理