自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

快速掌握Quartz.Net計(jì)劃任務(wù)調(diào)度框架,輕松實(shí)現(xiàn)定時(shí)任務(wù)

開源
Quartz.Net是一個(gè)開源的作業(yè)調(diào)度框架,可以用于管理計(jì)劃任務(wù)和定期執(zhí)行。Quartz.Net提供了豐富的作業(yè)計(jì)劃選項(xiàng),例如精確或模糊時(shí)間表達(dá)式、日期和時(shí)間限制等。Quartz.Net采用分布式架構(gòu),允許在多個(gè)計(jì)算機(jī)上運(yùn)行任務(wù)。

Quartz.Net架構(gòu)設(shè)計(jì)

Quartz.Net的架構(gòu)設(shè)計(jì)采用了經(jīng)典的MVC(Model-View-Controller)模式,其中:

  • Model:表示應(yīng)用程序中的數(shù)據(jù)和狀態(tài)。在Quartz.Net中,Model由Job和Trigger組成,并由Scheduler調(diào)度。
  • View:表示與用戶交互的部分。在Quartz.Net中,View由Scheduler框架提供的API和UI組件組成。
  • Controller:負(fù)責(zé)處理用戶輸入并更新Model和View。在Quartz.Net中,Controller由Scheduler控制器組成。
  1. Quartz.Net組件模塊

Quartz.Net包含以下組件模塊:

  • Scheduler:負(fù)責(zé)作業(yè)的調(diào)度和執(zhí)行。Scheduler維護(hù)一個(gè)作業(yè)和觸發(fā)器的調(diào)度列表,并根據(jù)定義的條件選擇要調(diào)度的作業(yè)。
  • Job:表示要執(zhí)行的作業(yè)。在Quartz.Net中,Job必須實(shí)現(xiàn)IJob接口。
  • Trigger:定義何時(shí)執(zhí)行作業(yè)。在Quartz.Net中,有多種類型的觸發(fā)器可供選擇,例如簡單觸發(fā)器、Cron觸發(fā)器等。
  • JobDetail:表示作業(yè)的詳細(xì)信息,包括執(zhí)行作業(yè)所需的Job類及其名稱、描述和其他數(shù)據(jù)。
  • JobExecutionContext:在作業(yè)執(zhí)行期間提供與應(yīng)用程序和Quartz.Net框架交互所需的上下文信息。
  • SchedulerFactory:用于創(chuàng)建Scheduler的工廠類。

在NetCore項(xiàng)目中集成Quartz.Net,可以通過以下步驟實(shí)現(xiàn):

安裝Quartz.Net NuGet包

在Visual Studio的NuGet包管理器中搜索安裝Quartz.Net包,或通過命令行安裝:dotnet add package Quartz。

創(chuàng)建作業(yè)類

依據(jù)項(xiàng)目需求創(chuàng)建對應(yīng)的作業(yè)類,并實(shí)現(xiàn)IJob接口,例如:

public class MyJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        await Console.Out.WriteLineAsync("Hello, Quartz.Net!");
    }
}

配置Scheduler

在Startup.cs文件中添加配置代碼,創(chuàng)建Scheduler,添加作業(yè)和觸發(fā)器:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IJobFactory, SingletonJobFactory>();
    services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
    services.AddSingleton(new JobSchedule(
        jobType: typeof(MyJob),
        cronExpression: "0/5 * * * * ?")); // 每5秒執(zhí)行一次

    services.AddHostedService<QuartzHostedService>();
}

public class JobSchedule
{
    public Type JobType { get; }
    public string CronExpression { get; }

    public JobSchedule(Type jobType, string cronExpression)
    {
        JobType = jobType;
        CronExpression = cronExpression;
    }
}

public class SingletonJobFactory : IJobFactory
{
    private readonly IServiceProvider _serviceProvider;

    public SingletonJobFactory(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        return (IJob)_serviceProvider.GetService(bundle.JobDetail.JobType);
    }

    public void ReturnJob(IJob job)
    {
        // do nothing
    }
}

public class QuartzHostedService : IHostedService
{
    private readonly ISchedulerFactory _schedulerFactory;
    private readonly IJobFactory _jobFactory;
    private readonly IEnumerable<JobSchedule> _jobSchedules;

    public QuartzHostedService(
        ISchedulerFactory schedulerFactory, 
        IJobFactory jobFactory, 
        IEnumerable<JobSchedule> jobSchedules)
    {
        _schedulerFactory = schedulerFactory;
        _jobFactory = jobFactory;
        _jobSchedules = jobSchedules;
    }

    public async Task StartAsync(CancellationToken cancellationToken)
    {
        var scheduler = await _schedulerFactory.GetScheduler(cancellationToken);
        scheduler.JobFactory = _jobFactory;

        foreach (var jobSchedule in _jobSchedules)
        {
            var jobDetail = JobBuilder.Create(jobSchedule.JobType).Build();

            var trigger = TriggerBuilder.Create()
                .WithCronSchedule(jobSchedule.CronExpression)
                .Build();

            await scheduler.ScheduleJob(jobDetail, trigger, cancellationToken);
        }

        await scheduler.Start(cancellationToken);
    }

    public async Task StopAsync(CancellationToken cancellationToken)
    {
        var scheduler = await _schedulerFactory.GetScheduler(cancellationToken);
        await scheduler.Shutdown(cancellationToken);
    }
}

啟動(dòng)和停止Scheduler

在Main函數(shù)中啟動(dòng)調(diào)度程序:

public static async Task Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();
    await host.RunAsync();
}

官方網(wǎng)站:https://www.quartz-scheduler.net/。

官方文檔:https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2024-06-11 08:30:25

Quartz.NET開源任務(wù)調(diào)度庫

2024-05-13 09:49:30

.NETQuartz庫Cron表達(dá)式

2023-08-08 08:35:28

web框架Hosting模塊

2024-07-08 00:00:02

.NET系統(tǒng)調(diào)度器

2023-10-06 12:15:02

2024-05-31 13:07:29

.NET Core定時(shí)任務(wù)編程

2022-03-23 11:45:39

Quartz數(shù)據(jù)庫節(jié)點(diǎn)

2017-07-14 11:50:15

Windows 10Windows計(jì)劃任務(wù)

2024-12-27 08:24:55

2020-12-21 07:31:23

實(shí)現(xiàn)單機(jī)JDK

2024-11-04 16:01:01

2023-12-26 07:44:00

Spring定時(shí)調(diào)度

2023-11-16 09:30:27

系統(tǒng)任務(wù)

2022-08-09 08:40:37

框架分布式定時(shí)任務(wù)

2024-02-19 00:00:00

分布式定時(shí)任務(wù)框架

2024-09-18 13:57:15

2024-11-25 15:00:00

C#定時(shí)任務(wù)開發(fā)

2009-06-19 15:20:08

Quartz任務(wù)調(diào)度Spring

2023-12-19 08:09:06

Python定時(shí)任務(wù)Cron表達(dá)式

2010-01-07 11:19:45

Linux計(jì)劃任務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)