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 文件

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

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 文件

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、 立即执行每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);

  

 

posted @ 2024-06-28 10:50  yinghualeihenmei  阅读(6)  评论(0编辑  收藏  举报