quartz 动态添加job_Quartz.Net使用教程

Quartz.Net使用教程

在项目的开发过程中,难免会遇见后需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,这个时候你就需要Quartz.Net了。

Quartz.Net是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现。

Quartz.Net一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。功能齐全体现在触发器的多样性上面,即支持简单的定时器,也支持Cron表达式;即能执行重复的作业任务,也支持指定例外的日历;任务也可以是多样性的,只要继承IJob接口即可。

对于小型应用,Quartz.Net可以集成到你的系统中,对于企业级系统,它提供了Routing支持,提供了Group来组织和管理任务,此外还有持久化、插件功能、负载均衡和故障迁移等满足不同应用场景的需要。

Hello Quartz.Net

开始使用一个框架,和学习一门开发语言一样,最好是从Hello World程序开始。

首先创建一个示例程序,然后添加Quartz.Net的引用。

Install-Package Quartz -Version 3.0.7

我们使用的是当前最新版本3.0.7进行演示。添加引用以后,来创建一个Job类HelloQuartzJob

public class HelloQuartzJob : IJob
{
public Task Execute(IJobExecutionContext context){
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Hello Quartz.Net");
});
}
}

这是个非常简单的Job类,它在执行时输出文本Hello Quartz.Net

接下来,我们在程序启动时创建调度器(Scheduler),并添加HelloQuartzJob的调度:

static async Task MainAsync()
{
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();
Console.WriteLine($"任务调度器已启动");

//创建作业和触发器
var jobDetail = JobBuilder.Create().Build();var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(m => {
m.WithRepeatCount(3).WithIntervalInSeconds(1);
})
.Build();//添加调度await scheduler.ScheduleJob(jobDetail, trigger);
}

然后运行程序,你会看到如下图:4e7fc3e8f6cda24eb448ab77ad7d0884.png

通过演示可以看出,要执行一个定时任务,一般需要四步:

  1. 创建任务调度器。调度器通常在应用程序启动时创建,一个应用程序实例通常只需要一个调度器即可。

  2. 创建Job和JobDetail。Job是作业的类型,描述了作业是如何执行的,这个类是由我们定义的;JobDetail是Quartz对作业的封装,它包含Job类型,以及Job在执行时用到的数据,还包括是否要持久化、是否覆盖已存在的作业等选项。

  3. 创建触发器。触发器描述了在何时执行作业。

  4. 添加调度。当完成以上三步以后,就可以对作业进行调度了。

作业:Job和JobDetail

Job是作业的类型,描述了作业是如何执行的,这个类型是由我们定义的,例如上文的HelloQuartzJob。Job实现IJob接口,而IJob接口只有一个Execute方法,参数context中包含了与当前上下文中关联的Scheduler、JobDetail、Trigger等。

一个典型的Job定义如下:

public class HelloQuartzJob : IJob
{
public Task Execute(IJobExecutionContext context){
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Hello Quartz.Net");
});
}
}

JobData

Job不是孤立存在的,它需要执行的参数,这些参数如何传递进来呢?我们来定义一个Job类进行演示。

public class SayHelloJob : IJob
{
public string UserName { get; set; }

public Task
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz.NET是一个功能强大的开源调度框架,可以在.NET应用程序中使用。下面是Quartz.NET V2.6.2版本的简单使用方法: 1.安装Quartz.NET 使用NuGet安装Quartz.NET: ``` Install-Package Quartz ``` 2.创建调度器 在应用程序中创建调度器实例: ``` ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler().Result; ``` 3.创建作业 创建实现IJob接口的作业类: ```csharp public class MyJob : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine("Hello World!"); return Task.CompletedTask; } } ``` 4.创建触发器 创建触发器实例: ```csharp ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10) .RepeatForever()) .Build(); ``` 5.将作业和触发器关联 将作业和触发器关联到调度器中: ```csharp IJobDetail job = JobBuilder.Create<MyJob>() .WithIdentity("job1", "group1") .Build(); scheduler.ScheduleJob(job, trigger); ``` 6.启动调度器 启动调度器并等待作业运行: ```csharp scheduler.Start(); ``` 完整代码示例: ```csharp using Quartz; using Quartz.Impl; using System; using System.Threading.Tasks; namespace QuartzDemo { class Program { static async Task Main(string[] args) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = await schedulerFactory.GetScheduler(); IJobDetail job = JobBuilder.Create<MyJob>() .WithIdentity("job1", "group1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10) .RepeatForever()) .Build(); await scheduler.ScheduleJob(job, trigger); await scheduler.Start(); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); await scheduler.Shutdown(); } } public class MyJob : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine("Hello World!"); return Task.CompletedTask; } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值