Quartz.net的简单使用

最近做一个job平台使用了Quartz.net,这是一个简单的作业调度框架,是c#版本的Quartz。(原版是java的)

做一个简单整理记录

3.0版本支持了.net core 的async/await。

官网下载地址:http://www.quartz-scheduler.net/

方便的放法是直接使用Nuget下载添加到项目中。

主要的接口和类说明:

IScheduler :和调度器交互的主要接口
JobBuilder:定义 JobDetail 实例
IJobDetail:定义 Job 实例及其它相关的静态信息
IJob:自定义的作业模块所要继承的接口,调度器会调用这个实现
TriggerBuilder:定义 Trigger 实例
ITrigger:定义 Job 被触发的时间

1.这边先建一个IJobModel接口去基础IJob接口,等等的所有job类都继承实现这个接口。

JobTime实现job时间设置,JobName实现Job名称蛇者。

2.新建一个Jobserver来进行Job任务的配置。

这边使用映射把所有继承于IJobModel的类都找出来,然后进行注册。

实现了Job类的简单管理。

如果是在Asp.net程序中的话,需要把Job任务加入到程序启动项Global.asax中去。

在Application_Start()中添加:JobServer.CreateScheduler().GetAwaiter().GetResult();

3.Job时间设置

cron expressions 整体上还是非常容易理解的,只有一点需要注意:"?"号的用法,看下文可以知道“?”可以用在 day of month 和 day of week中,他主要是为了解决如下场景,如:每月的1号的每小时的31分钟,正确的表达式是:* 31 * 1 * ?,而不能是:* 31 * 1 * *,因为这样代表每周的任意一天。

由7段构成:秒 分 时 日 月 星期 年(可选)
"-" :表示范围  MON-WED表示星期一到星期三
"," :表示列举 MON,WEB表示星期一和星期三
"*" :表是“每”,每月,每天,每周,每年等
"/" :表示增量:0/15(处于分钟段里面) 每15分钟,在0分以后开始,3/20 每20分钟,从3分钟以后开始
"?" :只能出现在日,星期段里面,表示不指定具体的值
"L" :只能出现在日,星期段里面,是Last的缩写,一个月的最后一天,一个星期的最后一天(星期六)
"W" :表示工作日,距离给定值最近的工作日
"#" :表示一个月的第几个星期几,例如:"6#3"表示每个月的第三个星期五(1=SUN...6=FRI,7=SAT)

官方实例

ExpressionMeaning
0 0 12 * * ?每天中午12点触发
0 15 10 ? * *每天上午10:15触发
0 15 10 * * ?每天上午10:15触发
0 15 10 * * ? *每天上午10:15触发
0 15 10 * * ? 20052005年的每天上午10:15触发
0 * 14 * * ?在每天下午2点到下午2:59期间的每1分钟触发
0 0/5 14 * * ?在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ?在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0-5 14 * * ?在每天下午2点到下午2:05期间的每1分钟触发
0 10,44 14 ? 3 WED每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI周一至周五的上午10:15触发
0 15 10 15 * ?每月15日上午10:15触发
0 15 10 L * ?每月最后一日的上午10:15触发
0 15 10 L-2 * ?Fire at 10:15am on the 2nd-to-last last day of every month
0 15 10 ? * 6L每月的最后一个星期五上午10:15触发
0 15 10 ? * 6LFire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-20052002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3每月的第三个星期五上午10:15触发
0 0 12 1/5 * ?Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
0 11 11 11 11 ?Fire every November 11th at 11:11am.

4.testJob.cs继承于IJobModel接口实现Job任务。

跑起来后会在输出栏内输出“Greetings from HelloJob!”,这边的DB工厂和Log4net下次再整理。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz.NET是一个非常流行的开源任务调度框架,可以帮助开发者实现定时任务、重复任务和异步任务的调度。本文将介绍Quartz.NET V2.6.2版本的简单使用。 1. 安装Quartz.NET 可以通过NuGet包管理器安装Quartz.NET,或者在Visual Studio中使用Package Manager Console命令: ``` Install-Package Quartz -Version 2.6.2 ``` 2. 创建任务 在Quartz.NET中,任务需要实现IJob接口。下面是一个简单的任务示例: ``` public class HelloJob : IJob { public async Task Execute(IJobExecutionContext context) { await Console.Out.WriteLineAsync("Hello, Quartz.NET!"); } } ``` 在Execute方法中编写任务逻辑,例如输出一句话。 3. 创建调度器 创建调度器需要使用SchedulerFactory和IScheduler接口。下面是一个简单的调度器示例: ``` // 创建调度器工厂 ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 创建调度器 IScheduler scheduler = await schedulerFactory.GetScheduler(); // 开启调度器 await scheduler.Start(); ``` 4. 创建任务触发器 任务触发器需要指定任务的执行时间和执行频率。下面是一个简单的触发器示例: ``` // 创建任务触发器 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("helloTrigger", "helloGroup") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(5) .RepeatForever()) .Build(); ``` 在上面的示例中,任务触发器每隔5秒钟执行一次。 5. 将任务和触发器绑定到调度器 将任务和触发器绑定到调度器需要使用JobDetail和Trigger接口。下面是一个简单的绑定示例: ``` // 创建任务 IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("helloJob", "helloGroup") .Build(); // 将任务和触发器绑定到调度器 await scheduler.ScheduleJob(job, trigger); ``` 6. 停止调度器 当不再需要调度器时,可以将其停止。下面是一个简单的停止示例: ``` // 停止调度器 await scheduler.Shutdown(); ``` 完整代码示例: ``` using System; using System.Threading.Tasks; using Quartz; using Quartz.Impl; namespace QuartzDemo { class Program { static async Task Main(string[] args) { // 创建调度器工厂 ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 创建调度器 IScheduler scheduler = await schedulerFactory.GetScheduler(); // 开启调度器 await scheduler.Start(); // 创建任务触发器 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("helloTrigger", "helloGroup") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(5) .RepeatForever()) .Build(); // 创建任务 IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("helloJob", "helloGroup") .Build(); // 将任务和触发器绑定到调度器 await scheduler.ScheduleJob(job, trigger); // 等待5分钟 await Task.Delay(TimeSpan.FromMinutes(5)); // 停止调度器 await scheduler.Shutdown(); } } public class HelloJob : IJob { public async Task Execute(IJobExecutionContext context) { await Console.Out.WriteLineAsync("Hello, Quartz.NET!"); } } } ``` 运行程序后,将会输出“Hello, Quartz.NET!”并且每隔5秒钟输出一次,持续5分钟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值