.Net Core 使用 Quartz快速入门(一)

 

一、需求场景

我们在日常开发中,总会遇到这样的需求:

  1. 每隔一段时间,执行一次某个任务。
  2. 固定某个时间执行任务,例如凌晨12点对当天的数据进行统计。
  3. 每个月的第几天,执行某个任务。

诸如此类的需求很多,我们总不能人工去干这件事吧 ?所以我们需要引入作业调度工具,也就是今天的主角——Quartz

二、Quartz基本介绍

2.1Quartz概述

Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。该项目于 2009 年被 Terracotta 收购,目前是 Terracotta 旗下的一个项目。读者可以到 http://www.quartz-scheduler.org/站点下载 Quartz 的发布版本及其源代码。

2.2Quartz的特点

 作为一个优秀的开源调度框架,Quartz 具有以下特点:

  1. 强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;
  2. 灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式;
  3. 分布式和集群能力,Terracotta 收购后在原来功能基础上作了进一步提升。

三、使用Quartz

此次我将建立一个.net Core 3.1 MVC项目进行演示

1、NuGet引入Quartz,目前为止Quartz的最新版本为3.0.7。

2、注册ISchedulerFactory的实例。

切换至Startup类,在ConfigureServices方法中添加如下代码

services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();

3、创建作业

 我们添加一个Jobs的类,继承Ijob接口

Jobs类中的Execute方法,多线程的向我们的D盘中的message.log文本文件中写入当前时间。

3.代码演示。

切换到HomeController ,正式开始撸代码。

 public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly ISchedulerFactory _schedulerFactory;
        private IScheduler _scheduler;

        public HomeController(ILogger<HomeController> logger, ISchedulerFactory schedulerFactory)
        {
            _logger = logger;
            _schedulerFactory = schedulerFactory;
        }

        public async Task<IActionResult> Index()
        {
            //通过工场类获得调度器
            _scheduler = await _schedulerFactory.GetScheduler();
            //开启调度器
            await _scheduler.Start();
            //创建触发器(也叫时间策略)
            var trigger = TriggerBuilder.Create()
                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())//每10秒执行一次
                            .Build();
            //创建作业实例
            //Jobs即我们需要执行的作业
            var jobDetail = JobBuilder.Create<Jobs>()
                            .WithIdentity("Myjob", "group")//我们给这个作业取了个“Myjob”的名字,并取了个组名为“group”
                            .Build();
            //将触发器和作业任务绑定到调度器中
            await _scheduler.ScheduleJob(jobDetail, trigger);
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

4、运行结果

可以看到程序每隔10秒就会向message文件写入一行当前时间。

四、更多时间策略

文章开篇我们就列举了几种常见的业务需求,上面的案例中,我们演示了10秒钟执行一次的效果。如果需要以分钟、小时、天等作为单位,甚至是更为复杂的时间策略,如何定制呢?

.Net Core 使用 Quartz 快速入门(二)

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Quartz.NET是一款开源的任务调度框架,可以用于在.NET应用程序中调度作业(Job)和触发器(Trigger)。下面是一个简单的Quartz.NET入门用法: 1. 安装Quartz.NET 可以通过NuGet包管理器来安装Quartz.NET,或者从官网下载源代码并编译。 2. 创建Job类 Job类是一个实现了IJob接口的类,可以在其中定义具体的作业逻辑。例如: ``` public class MyJob : IJob { public async Task Execute(IJobExecutionContext context) { // 在这里实现具体的作业逻辑 Console.WriteLine("Hello, Quartz.NET!"); } } ``` 3. 创建Trigger Trigger是用于定义作业执行的时间和频率的对象。可以根据需求选择不同的Trigger类型。例如,以下是一个简单的Trigger: ``` ITrigger trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10) .RepeatForever()) .Build(); ``` 上述代码创建了一个简单的Trigger,它会立即开始执行,并且每隔10秒重复一次。 4. 创建Scheduler Scheduler是任务调度框架的核心对象,它负责管理所有作业和触发器,以及执行调度任务。可以通过以下代码来创建一个Scheduler: ``` ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = await schedulerFactory.GetScheduler(); ``` 5. 将Job和Trigger注册到Scheduler中 在创建了Job和Trigger之后,需要将它们注册到Scheduler中,以便Quartz.NET能够管理它们。例如: ``` JobDetailImpl jobDetail = new JobDetailImpl("myJob", typeof(MyJob)); await scheduler.ScheduleJob(jobDetail, trigger); ``` 上述代码将MyJob类注册为一个作业,并将上述创建的Trigger与该作业关联起来。 6. 启动Scheduler 最后,需要启动Scheduler以开始执行作业。例如: ``` await scheduler.Start(); ``` 现在,Quartz.NET就会执行MyJob作业,并根据Trigger定义的时间和频率重复执行。当然,这只是Quartz.NET入门用法,Quartz.NET还有很多高级功能和配置选项,可以根据具体需求进行使用和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值