.NET中使用Quartz

这篇具有很好参考价值的文章主要介绍了.NET中使用Quartz。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Quartz是一个流行的开源任务调度库,它提供了强大的任务调度功能,可以方便地与.NET应用程序集成。

Quartz.NET是Quartz的.NET版本,它是为.NET框架编写的,并提供了与.NET应用程序的集成。它支持各种调度策略,包括定时、间隔、日历等,可以灵活地配置和管理任务。

Quartz.NET具有以下特点:

  1. 开源:Quartz.NET是一个开源项目,可以免费使用和修改。
  2. 稳定性:Quartz.NET具有高可用性和伸缩性,能够应对大规模和关键任务应用场景。
  3. 灵活性:Quartz.NET提供了多种调度策略,可以灵活地配置和管理任务。
  4. 可扩展性:Quartz.NET可以与其他.NET应用程序集成,提供了更高级别的自动化和任务调度功能。
  5. 社区支持:Quartz.NET有着活跃的社区支持,可以方便地找到帮助和资源。

Quartz.NET的主要组件包括调度器、触发器和作业。调度器是Quartz.NET的核心组件,负责管理和协调任务的执行。触发器定义了任务执行的时间和频率,可以根据需要设置时间表达式。作业是实际执行的任务,可以是任何.NET类和方法。

Quartz.NET的使用非常灵活,可以通过XML配置文件、代码或依赖注入进行配置和管理。它提供了丰富的API和文档,可以方便地定制和扩展。此外,Quartz.NET还支持多种类型的触发器,包括SimpleTrigger、CronTrigger和CalendarIntervalTrigger等。这些触发器可以根据需要选择,以满足不同的调度需求。

总之,Quartz.NET是一个功能强大的任务调度库,适用于各种.NET应用程序。它可以提高生产力和效率,减少人工干预和管理成本,为企业级应用提供更高级别的自动化和可扩展性。

触发器介绍:

触发器类型一共有4种。

1、WithSimpleSchedule

ITrigger simpleTrigger = TriggerBuilder.Create()
  .WithIdentity("trigger1", "group1")
  .WithSimpleSchedule(x => x.WithIntervalInHours(2)
    .RepeatForever()
   )
  .Build();

指定时间间隔,有WithInterval(TimeSpan)、WithIntervalInHours、WithIntervalInMinutes、WithIntervalInSeconds。

2、WithDailyTimeIntervalSchedule

ITrigger dailyTimeTrigger = TriggerBuilder.Create()
  .WithIdentity("trigger1", "group1")
  .WithDailyTimeIntervalSchedule(x => x.OnEveryDay().WithIntervalInSeconds(5))     //5秒执行一次
  .Build();

支持更精确的时间配置,它可以选择每天、周末、工作日、周几,同时指定的时间范围及执行时间周期。

3、WithCalendarIntervalSchedule

ITrigger calendarTimeTrigger = TriggerBuilder.Create()
  .WithIdentity("trigger1", "group1")
  .WithCalendarIntervalSchedule(x => x.WithIntervalInSeconds(5))     //5秒执行一次
  .Build();

它可以支持年、月、周、日、时、分、秒及夏令时的设置,可以用于创建一个在指定的时间间隔内重复运行的调度任务。 

Trigger trigger = TriggerBuilder.Create()  
                        .WithIdentity("trigger1", "group1")  
                        .WithCalendarIntervalSchedule(x => x  
                            .WithInterval(TimeSpan.FromDays(1))  
                            .WithAlignToStartTime(true).Build());

 在上面的例子中,我们创建了一个每天都会触发一次的 Trigger。其中 WithInterval 方法设置了调度任务的时间间隔,而 WithAlignToStartTime 则让任务开始时间对齐到开始时间的下一个时间间隔。这样做的目的是避免重复调度。例如,如果设置为每两天执行一次,并且当前是第一天,则下一次执行将在两天后,而不是立即执行。

4、WithCronSchedule

ITrigger cronTrigger = TriggerBuilder.Create()
  .WithIdentity("trigger1", "group1")
  .WithCronSchedule("0 0/1 * * * ?")
  .UsingJobData("order_no", Guid.NewGuid().ToString())//作业数据传递
  .Build();

使用Cron表达式,一般实际项目中使用的是WithCronSchedule,因为Cron表达式更加灵活、方便。 

本实列使用抽象工厂设计模式。Quartz的版本为3.0.7.0。

一、创建调度器添加JOB的接口

namespace QuartzNet.Interface
{
    interface ISchedulerAddJob
    {
        //尽量保证job、group、trigger、order_no的唯一性,避免冲突
        void SchedulerAddJob();
    }
}

二、实现IJob接口,指定执行的作业

using BLL;
using Quartz;
using System.Threading.Tasks;

namespace QuartzNet.ExecuteJobWaysImpl
{
    public class ExecuteSyncInTime : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
                //调用无返回值的方法
                new Class1().SyncInTime();
            });
        }
    }
}

三、实现ISchedulerAddJob接口

using Quartz;
using QuartzNet.ExecuteJobWaysImpl;
using QuartzNet.Interface;
using System;

namespace QuartzNet.SchedulerImpl
{
    public class SyncInTimeImpl : ISchedulerAddJob
    {
        IScheduler scheduler;

        //1、构造器注入调度器
        public SyncInTimeImpl(IScheduler scheduler)
        {
            this.scheduler = scheduler;
        }

        public async void SchedulerAddJob()
        {
            //2、创建一个任务
            IJobDetail job = JobBuilder.Create<ExecuteSyncInTime>().WithIdentity("job3", "group3").Build();

            //3、创建一个WithSimpleSchedule触发器
            ITrigger simpleTrigger = TriggerBuilder.Create()
                                                   .WithIdentity("trigger3", "group3")
                                                   .WithSimpleSchedule(x => x.WithIntervalInHours(Properties.Settings.Default.JOB3_RUNTIME)
                                                                             .RepeatForever()
                                                                       )
                                                   .UsingJobData("order_no3", Guid.NewGuid().ToString())//作业数据传递
                                                   .Build();

            //4、将任务与触发器添加到调度器中
            await scheduler.ScheduleJob(job, simpleTrigger);
        }
    }
}

四、创建一个调度工厂,用于创建调度器,确保唯一实例

using Quartz;
using Quartz.Impl;
using System.Threading.Tasks;

namespace QuartzNet
{
    public class QuartzManage
    {
        //创建一个调度工厂
        public static Task<IScheduler> scheduler = GetScheduler();

        private async static Task<IScheduler> GetScheduler()
        {
            StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
            IScheduler scheduler = await stdSchedulerFactory.GetScheduler();
            return scheduler;
        }
    }
}

五、调用SchedulerAddJob方法,创建任务和触发器,并添加到调度器中,可批量调用

public partial class QuartzForm : Form
{
    //向上转型,里氏替换原则
    private static ISchedulerAddJob schedulerAddJob;
    private static IScheduler scheduler;

    public QuartzForm ()
    {
        InitializeComponent();
    }

    private async void btnStart_Click(object sender, EventArgs e)
    {
        //唯一调度器
        scheduler = await QuartzManage.scheduler;

        schedulerAddJob = new SyncInTimeImpl(scheduler);
        schedulerAddJob.SchedulerAddJob();

        //开始执行
        await scheduler.Start();
    }
}

六、关闭、暂停和恢复JOB的方法文章来源地址https://www.toymoban.com/news/detail-732195.html

//在应用程序关闭时运行的代码
if (scheduler != null)
{
    await scheduler.Shutdown(true);
}

//暂停所有job
await scheduler.PauseAll();

//恢复所有job
await scheduler.ResumeAll();

到了这里,关于.NET中使用Quartz的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于 Quartz.NET 可视化任务调度平台 QuartzUI

    QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理,Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 QuartzUI 从 2022 年到现在没有提交记录,这里的部署使用的是最后一个版本的镜像。Windows D

    2024年04月25日
    浏览(48)
  • ASP.NET Core MVC+Quartz实现定时任务可视化管理页面

    在前一篇文章,我们了解了如何通过.NET6+Quartz开发基于控制台应用程序的定时任务,今天继续在之前的基础上,进一步讲解基于ASP.NET Core MVC+Quartz实现定时任务的可视化管理页面,仅供学习分享使用,如有不足之处,还请指正。 Quartz组件,关于Quartz组件的基本介绍,可参考前

    2024年02月01日
    浏览(47)
  • .Net6下使用Ado.Net

    Ado.Net,是微软提供的在.Net平台下操作数据库(本文实例记录MySQL、SQLSever数据的基本操作)、XML文件和应用程序数据的一个工具。是应用程序和数据库之间的数据桥梁。它拥有一组丰富的类、方法和接口,有效地处理数据库中的数据。(上层的ORM框架《EFCore、Dapper等》都是对它

    2024年02月05日
    浏览(49)
  • C# .NET ADO.NET介绍和如何使用

    .NET Framework 4.7.2 Visual Studio 2022 Sql server 2008 新建项目 我们看一下visual studio 里面ADO.NET文件 ADO.NET是实体数据模型,是ORM对象文件。ORM,即Object-Relational Mapping(对象关系映射)。 ORM实际上是对业务的简化。就想面向过程到面向对象的转变一样。 面向过程和面向对象 面向过程:程序

    2024年02月09日
    浏览(62)
  • 【C#/.NET】使用ASP.NET Core对象池

    Microsoft.Extensions.ObjectPool   减少初始化/资源分配,提高性能。这一条与线程池同理,有些对象的初始化或资源分配耗时长,复用这些对象减少初始化和资源分配。比如:我有一个执行耗时约500毫秒,内存空间 2KB的任务为此创建一个新线程异步执行,而创建线程耗时1秒,内存空

    2024年02月06日
    浏览(66)
  • 使用.NET Jieba.NET 的 PosSegmenter 实现中文分词匹配

    ​ 目录 引言 1. 什么是中文分词 2. Jieba.NET简介 3. PosSegmenter介绍 4. 实现中文分词匹配 4.1 安装Jieba.NET库 4.2 创建PosSegmenter实例 4.3 分词和词性标注 4.4 中文分词匹配 5. 总结           在自然语言处理领域,中文分词是一个重要且基础的任务。中文文本通常没有像英文那样的

    2024年02月11日
    浏览(75)
  • .NET6入门:2.使用模板创建.NET Core Web

                    在目前B/S盛行的时代,本文将通过创建一个.NET Core Web模板的方式来带领大家进入.NET6开发的大门。         1.1 打开Visual Studio(不同版本VS可能创建新项目所在位置不同),单击创建新项目。         1.2 选择C#语言和Web平台,在下面的项目中选中ASP.NET Core Web应

    2024年02月12日
    浏览(47)
  • Asp.Net 使用Log4Net (基础版)

    创建ASP.NET Web Forms项目 在Visual Studio中创建一个新的ASP.NET Web Forms项目。命名为\\\"Log4NetDemo\\\"。 打开NuGet包管理器控制台,并运行以下命令来安装Log4Net: 在Web.config文件中添加Log4Net的配置。将以下内容粘贴到Web.config文件中。 在Global.asax文件中,我们需要初始化Log4Net。在 Applicatio

    2024年02月15日
    浏览(44)
  • Asp.Net 6中使用Log4Net

    log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore log4net配置参数此处不多赘述,只针对日志的输出格式参数conversionPattern配置做简要说明。 新建一个ITestLog4Net接口文件,并为其定义一个Log方法 并且新建一个TestLog4Net的自定义类,继承于ITestLog4Net,并实现该Log方法。 在Program中注入我

    2024年02月15日
    浏览(41)
  • Asp.Net MVC 使用Log4Net

    在 ASP.NET MVC 中使用 Log4net 需要进行一些配置和代码集成。下面是在 ASP.NET MVC 中使用 Log4net 的步骤: 打开 NuGet 包管理器控制台,并运行以下命令来安装 Log4net: 在你的 ASP.NET MVC 项目中,创建一个名为 log4net.config 的文件(或者其他名称,只要后缀是 .config 即可),用于配置

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包