首页 > 其他分享 >Quartz NetCore定时器任务应用之基于Quartz.Extension.Hosting

Quartz NetCore定时器任务应用之基于Quartz.Extension.Hosting

时间:2023-03-04 09:46:49浏览次数:43  
标签:Task Extension NetCore IJob Quartz logger config public

上一篇主要介绍基于Quartz原生类库开发netcore定时器任务,有关Quartz的基本概念这里也不再累述了,接下来主要介绍基于Quartz.Extension.Hosting扩展类库快速开发。

1、通过Manage NuGet Pakage / Pakage Manage Console安装Quartz及Quartz.Extensions.Hosting,当前版本如下:

2、首先定义2个定时器任务ServiceJobA,ServiceJobB分别继承自IJob接口,实现Execute方法

using Quartz;

namespace API.Quartz.Jobs;

[DisallowConcurrentExecution]
public class ServiceJobA : IJob
{
    private readonly ILogger<ServiceJobA> _logger;

    public ServiceJobA(ILogger<ServiceJobA> logger)
    {
        _logger = logger;
    }

    public Task Execute(IJobExecutionContext context)
    {
        Task.Run(() =>
        {
            _logger.LogInformation($"DateTime.Now: {DateTime.Now.ToLongTimeString()}, The service job A has been excuted.");
        });
        return Task.CompletedTask;
    }
}
ServiceJobA
using Quartz;

namespace API.Quartz.Jobs;

[DisallowConcurrentExecution]
public class ServiceJobB : IJob
{
    private readonly ILogger<ServiceJobB> _logger;

    public ServiceJobB(ILogger<ServiceJobB> logger)
    {
        _logger = logger;
    }

    public Task Execute(IJobExecutionContext context)
    {
        Task.Run(() =>
        {
            _logger.LogInformation($"DateTime.Now: {DateTime.Now.ToLongTimeString()}, The service job B has been excuted.");
        });
        return Task.CompletedTask;
    }
}
ServiceJobB

3、定义IServiceCollectionQuartzConfigurator的扩展方法,配置IJob及ITrigger,这里通过Configuration读取每个IJob 调度周期

using Quartz;

namespace API.Quartz.Extensisons;

public static class QuartzConfigureExtenstion
{
    public static void AddJobTrigger<T>(this IServiceCollectionQuartzConfigurator quartz, IConfiguration config)
        where T : IJob
    {
        var cronExpression = config[$"Quartz:{typeof(T).Name}"];
        if (string.IsNullOrEmpty(cronExpression))
            throw new ArgumentNullException("The service job schedule is null or empty.");
        var jobKey = new JobKey(typeof(T).Name);
        quartz.AddJob<T>(c => c.WithIdentity(jobKey));
        quartz.AddTrigger(c => c.ForJob(jobKey).WithIdentity($"{typeof(T).Name}_trigger").WithCronSchedule(cronExpression));
    }
}
IServiceCollectionQuartzConfigurator

4、利用Quartz.Extension.Hosting提供的AddQuartz及AddQuartzHostedService完成IOC注入

builder.Services.AddQuartz(config =>
{
    config.UseMicrosoftDependencyInjectionJobFactory();
    config.AddJobTrigger<API.Quartz.Jobs.ServiceJobA>(builder.Configuration);
    config.AddJobTrigger<API.Quartz.Jobs.ServiceJobB>(builder.Configuration);
});
builder.Services.AddQuartzHostedService(options =>
{
    options.AwaitApplicationStarted = true;
    options.WaitForJobsToComplete = true;
});
IOC

5、appsettings.json配置

  "Quartz": {
    "ServiceJobA": "0/5 * * * * ?",
    "ServiceJobB": "0/30 * * * * ?"
  }

启动程序,效果如下:

 JobServiceA每5s执行一次,JobServiceB每30s执行一次。

利用Quartz的扩展类库开发netcore 定时器作业调用更加简洁方便,更多应用还需继续学习!!!

标签:Task,Extension,NetCore,IJob,Quartz,logger,config,public
From: https://www.cnblogs.com/qindy/p/17168895.html

相关文章

  • NetCore Ocelot
       Ocelot是一个用.NETCore实现并且开源的API网关,功能包括:路由,请求聚合,服务验证,鉴权,限流熔断,并内置了负载均衡器与ServiceFabric,ButteflyTracing集成。这些功能都......
  • NetCore Ocelot 之 请求聚合 Aggregator
    Ocelot允许声明聚合路由,把多个Routes请求batch一个对象来对客户端的请求进行响应。1、ocelotconfiguration{"DownstreamPathTemplate":"/api/service1",......
  • NetCore 之 DispatchProxy
    如何使用Dispatchproxy封装RESTAPI,让API调用更简单。1、创建HttpClientDispathProxy类继承自DispatchProxypublicclassHttpClientDispathProxy<TInterface>:D......
  • NetCore JWT token
    在netcore中jwt使用场景很多,网上有很多的资料,这里不再累述,之后有机会会单独介绍,今天主要以实战为主。1、createjwttoken1publicinterfaceIJwtTokenService2......
  • NetCore Resource
    在netcore中resource的配置及应用1、创建resource资源文件   2、在容器中添加配置1builder.Services.AddLocalization(options=>options.ResourcesPath="......
  • docker下netcore内存dump
    一般开发阶段可以通过visualstudio来检查程序的内存、cup等的优化问题。vs下调试=》性能探查器,这里面大有千秋。但是好多内存问题是经过时间积累下来才暴露出来的,在生产......
  • winfrom quartz 实现任务信息绑定到窗体上
    一个任务可以绑定多个触发器但是一个触发器不能绑定多个任务 使用委托实现多线程同步窗体publicpartialclassForm1:Form{publicstaticForm1......
  • QuartZ
    Quartz.NET是一个强大、开源、轻量级的任务调度框架。任务调度在我们的开发中经常遇到,如说:每天晚上三点让程序或网站执行某些代码,或者每隔5秒种执行一个方法等。Windows......
  • 如何在Windows窗体中使用Quartz .net?
    好!我浪费了太多时间来解决这个问题,使Quartz.net在windows窗体上工作。但是,我有一个通用的解决方案,我希望能帮助其他人。像往常一样创建IJOB类创建一个指向表单的静态......
  • iis7上部署netcore项目的步骤
    1、安装AspNetCoreModule托管模块(选择.NetCore3.1版本)AspNetCoreModule下载地址:https://dotnet.microsoft.com/download/dotnet-core1安装下面两个文件dotnet-sdk-3......