首页 > 其他分享 >.net core 使用定时任务 quartz.net 实例

.net core 使用定时任务 quartz.net 实例

时间:2024-11-05 09:20:41浏览次数:3  
标签:core quartz serviceProvider 调度 HelloJob IJob scheduler net public

项目是core3.1的

 

只用引用一个包就可以了

引用配置Quartz

首先创建一个任务工厂

public class CronJobFactory : IJobFactory
{
    private readonly IServiceProvider _serviceProvider;

    public CronJobFactory(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
    }
    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        return _serviceProvider.GetRequiredService(bundle.JobDetail.JobType) as IJob;
    }

    public void ReturnJob(IJob job)
    {
    }
}

 

创建一个HelloJob类并实现  IJob接口      自定义任务

public class HelloJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        await Console.Out.WriteLineAsync($"{DateTime.Now:HH:mm:ss}--Hello World!");
    }
}

新建SchedulerCenter类      调度中心

public class SchedulerCenter
{
    private readonly IJobFactory _jobFactory;
    private readonly ISchedulerFactory _schedulerFactory;
    private IScheduler _scheduler;
    public SchedulerCenter(IJobFactory jobFactory, ISchedulerFactory schedulerFactory)
    {
        _jobFactory = jobFactory;
        _schedulerFactory = schedulerFactory;
    }
    public async void StartScheduler()
    {
        //1、从工厂获取调度程序实例
        _scheduler = await _schedulerFactory.GetScheduler();

        // 替换默认工厂
        _scheduler.JobFactory = this._jobFactory;

        //2、打开调度器
        await _scheduler.Start();

        //3、定义作业详细信息并将其与HelloJob任务相关联
        IJobDetail job = JobBuilder.Create<HelloJob>()
            .WithIdentity("HelloJob", "HelloJobGroup")
            .Build();

        //4、配置触发条件:立即触发作业运行,然后每10秒重复一次
        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("HelloJob", "HelloJobGroup")
            .StartNow()
            .WithSimpleSchedule(x => x
                .WithIntervalInSeconds(10)
                .RepeatForever())
            .Build();

        //5、将作业与触发条件添加到调度实例并进行关联
        await _scheduler.ScheduleJob(job, trigger);
    }
    public void StopScheduler()
    {
        _scheduler?.Shutdown(true).Wait(30000);
        _scheduler = null;
    }
}

 

 

接下来在startup.cs中的ConfigureServices增加一些配置注入

//注入调度中心
services.AddSingleton<SchedulerCenter>();

//注入Quartz任何工厂及调度工厂
services.AddSingleton<IJobFactory, CronJobFactory>();
services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();

//注入HelloJob
services.AddTransient<HelloJob>();

 在Startup类的Configure方法中进行启动配置

//获取调度中心实例
var quartz = app.ApplicationServices.GetRequiredService<SchedulerCenter>();

lifetime.ApplicationStarted.Register(() =>
{
    quartz.StartScheduler(); //项目启动后启动调度中心
});

lifetime.ApplicationStopped.Register(() =>
{
    quartz.StopScheduler();  //项目停止后关闭调度中心
});

 在helloJob中实现具体的调用

public class HelloJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        
        await Console.Out.WriteLineAsync($"{DateTime.Now:HH:mm:ss}");
    }
}

注意!!!!!!!项目启动后,记得重新在地址栏重新回车一下,不然不会自动执行!!!!!!

 

 

 

 

参考引用:.Net Core(五) 引入定时任务Quartz.Net - 咸鱼翻身? - 博客园

标签:core,quartz,serviceProvider,调度,HelloJob,IJob,scheduler,net,public
From: https://www.cnblogs.com/wangxlei/p/18527192

相关文章

  • 在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.1.0)
    在不受支持的Mac上安装macOSSequoia(OpenCoreLegacyPatcherv2.1.0)InstallmacOSonunsupportedMacs请访问原文链接:在不受支持的Mac上安装macOS(索引页面)查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2024-11-01,OpenCoreLegacyPatcher2.1.0发......
  • Nature Genetics | 基因组所周永锋团队建立葡萄全基因组选择育种体系
    葡萄是一种具有重要经济价值的多年生水果作物,可作为水果食用或作为酿造葡萄酒的原材料,已有逾万年的驯化历史[1],并且在驯化过程中积累了大量的有害突变[1-3]。由于育种周期长,育种性状的遗传学研究不深入,遗传转化体系不成熟,尚未广泛应用多组学与人工智能等革命性技术,葡萄的生物育种......
  • Nat. Genet | 中农董朝斌团队揭示玉米驯化基因tsh4在株型和穗型发育中的调控作用
    在玉米从其祖先大刍草驯化而来的8000至10000年历史中,其株型和穗型经历了显著的演变。尽管株型和穗型分别与营养器官和生殖器官相关,但它们在发育过程中有着紧密的联系和共同的遗传基础。尽管已知几个关键基因如_tb1、tga1、tru1、gt1_在玉米驯化中起作用,但这些基因如何协同调控株型......
  • Kubernetes-K8S的安装
    前言:望大家可以跟着我的走,我将自己踩的坑都会一一说出来,尽量为大家踩出一条没有荆棘的路,有问题大家可以留言和私信我会一一解答,我不是大神就是一个学习小伙汁,那么接下来让我们开始安装步骤建议使用阿里云的服务器首先开通三个2核2G的ECS云服务器(按量付费)安装Kuber......
  • 聊一聊 .NET高级调试 中的一些内存术语
    一:背景1.讲故事在高级调试的旅程中,经常会有一些朋友问我什么是 工作集(内存),什么是 提交大小,什么是 VirtualSize,什么是 WorkingSet 。。。截图如下:既然有很多朋友问,这些用口头也不怎么好描述,刚好上午有时间就系统的聊一下吧。二:内存术语解读1.VirtualSize......
  • 聊一聊 .NET高级调试 中必知的符号表
    一:背景1.讲故事在高级调试的旅行中,发现有不少人对符号表不是很清楚,其实简而言之符号表中记录着一些程序的生物特征,比如哪个地址是函数(签名信息),哪个地址是全局变量,静态变量,行号是多少,数据类型是什么等等,目的就是辅助我们可视化的调试,如果没有这些辅助我们看到的都是一些无......