ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十七节--Quartz与ABP框架Abp.Quartz及扩展

ABP+AdminLTE+Bootstrap Table权限管理系统一期
Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate-Project-CMS

Quartz简介

Quartz.NET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等.

参考

对Quartz.NET不熟悉的可以先看下
官方学习文档:
使用实例介绍:
官方的源代码下载:

特性
它一些很好的特性:

支持集群,作业分组,作业远程管理。

自定义精细的时间触发器,使用简单,作业和触发分离。

数据库支持,可以寄宿Windows服务,WebSite,winform等。

Quartz框架的一些基础概念解释:

名称 描述
Scheduler   作业调度器。  
 IJob   作业接口,继承并实现Execute, 编写执行的具体作业逻辑。  
JobBuilder   根据设置,生成一个详细作业信息(JobDetail)。  
TriggerBuilder   根据规则,生产对应的Trig  
实战

Web.config配置

基础概念我就懒得讲了,你也懒得听了,直接上代码吧。
首先配置一下Web.config,其实这步可有可无,可以直接跳过,只是为了配置一些常量,获取固定的时间,但是不是必要的。

<sectionGroup> <section type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </sectionGroup> <JobList> <Job> <!--这里是一个任务节点--> <add key="Url" value="http://www.baidu.com" /> <!--需要访问的Url--> <add key="Hour" value="10" /> <!--开始时间小时--> <!--开始时间小时,注意:这里的小时为0-23,如果是1点的话就是1,而不是01--> <add key="Minute" value="30" /> <!--开始时间分钟--> <!--开始时间分钟,注意:同上0-59--> </Job> </JobList>

创建service
创建ISystemSchedulerService以及SystemSchedulerService,代码上面都有详细的注释,我就不重复了。
接口:

public interface ISystemSchedulerService: IApplicationService { void StartScheduler(); }

service: SystemSchedulerService

public class SystemSchedulerService : ISystemSchedulerService { private IScheduler _scheduler; public ILogger _Logger { get; set; } public SystemSchedulerService() { _Logger = NullLogger.Instance; } public void StopScheduler() { _scheduler.Shutdown(); } public void StartScheduler() { try { //这里读取配置文件中的任务开始时间 int hour = int.Parse(((NameValueCollection)ConfigurationManager.GetSection("JobList/Job"))["Hour"]); int minute = int.Parse(((NameValueCollection)ConfigurationManager.GetSection("JobList/Job"))["Minute"]); ISchedulerFactory schedulerFactory = new StdSchedulerFactory();//内存调度 _scheduler = schedulerFactory.GetScheduler(); //创建一个Job来执行特定的任务 IJobDetail myLogJob = new JobDetailImpl("myLogJob", typeof(MyLogJob)); //创建并定义触发器的规则(每天执行一次时间为:时:分) ITrigger trigger = TriggerBuilder.Create() .WithDailyTimeIntervalSchedule( a => a.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(hour, minute))).Build(); _scheduler.Clear(); //将创建好的任务和触发规则加入到Quartz中 _scheduler.ScheduleJob(myLogJob, trigger); //开始 _scheduler.Start(); } catch (Exception ex) { _Logger.Info(ex.Message); } } } Quartz API

Quartz API的关键接口和类是:

IScheduler - 与调度程序交互的主要API。
-IJob- 您希望由调度程序执行的组件实现的接口。

IJobDetail - 用于定义作业的实例。

ITrigger- 定义执行给定Job的时间表的组件。

JobBuilder - 用于定义/构建obDetail实例,它定义了Jobs的实例。

TriggerBuilder- 用于定义/构建触发器实例。

一个调度程序的生命周期是由它为界的创作,通过SchedulerFactory和其有关方法的调用。一旦创建了IScheduler接口,就可以使用添加,删除和列出作业和触发器,并执行其他与调度相关的操作(例如暂停触发器)。但是,调度程序不会实际上对任何触发器(执行作业)执行操作,直到使用Start()方法启动它。

构建作业定义的代码块使用使用流畅接口的JobBuilder创建产品IJobDetail。同样,构建触发器的代码块使用TriggerBuilder流畅的接口和特定于触发器类型的扩展方法。可能的时间延长方法是:

WithCalendarIntervalSchedule

WithCronSchedule

WithDailyTimeIntervalSchedule

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssjds.html