文档目录html
本节内容:async
Quartz 是一个功能完整的开源工做调度系统,可用于最小的应用到一个大型的企业系统.Abp.Quartz 包简单地把Quartz集成到ABP中.ui
ABP已经内置后持久化的台做业和工做者,若是你有更高的调度上的需求,Quzrtz是一个好的选择,一样Hangfire 也是一个好的关于持久化后台工做的队列的选择.spa
把Abp.Quartz nuget包安装到你的项目里,而后在你的模块上为AbpQuartzModule添加一个DependsOn 特性:日志
[DependsOn(typeof (AbpQuartzModule))] public class YourModule : AbpModule { //... }
为建立一个新的工做,你要么实现Quartz的IJob接口,或从JobBase类继承(定义在Abp.Quartz包里),JobBase有些帮助性的属性和方法(例如:日志和本地化),一个简单的Job类以下所示:htm
public class MyLogJob : JobBase, ITransientDependency { public override void Execute(IJobExecutionContext context) { Logger.Info("Executed MyLogJob :)"); } }
咱们经过记录日志,简单地实现Execute方法,更多信息能够查看Quartz文档.blog
用IQuartzScheduleJobManager 来调度工做,把能够把它注入到你的类里(或者在你的模块的PostInitialize方法里解析它的实例而后使用它)来调度工做.举个用控制器调度一个工做的例子:
public class HomeController : AbpController { private readonly IQuartzScheduleJobManager _jobManager; public HomeController(IQuartzScheduleJobManager jobManager) { _jobManager = jobManager; } public async Task<ActionResult> ScheduleJob() { await _jobManager.ScheduleAsync<MyLogJob>( job => { job.WithIdentity("MyLogJobIdentity", "MyGroup") .WithDescription("A job to simply write logs."); }, trigger => { trigger.StartNow() .WithSimpleSchedule(schedule => { schedule.RepeatForever() .WithIntervalInSeconds(5) .Build(); }); }); return Content("OK, scheduled!"); } }
关于Quartz更多内容,请查看它的文档