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

WithSimpleSchedule

示例中的ITrigger其实可以不读取配置信息的。这就是我说的不用配置Web.config也可以。效果如下,每隔10秒执行一次。

ITrigger trigger = TriggerBuilder.Create() .WithDailyTimeIntervalSchedule( a => a.WithIntervalInSeconds(10)).Build(); 工作和触发器

代码:

public class MyLogJob : JobBase, ITransientDependency { public ILogger _Logger { get; set; } public MyLogJob() { _Logger = NullLogger.Instance; } public override void Execute(IJobExecutionContext context) { try { _Logger.Info("QuartzJob 任务开始运行"); for (int i = 0; i < 10; i++) { _Logger.InfoFormat("QuartzJob 正在运行{0}", i); } _Logger.Info("QuartzJob任务运行结束"); } catch (Exception ex) { _Logger.Error("运行异常:"+ex.Message, ex); } } }

当作业的触发器触发,Execute(..)方法由调度程序的工作线程之一调用。传递给此方法的JobExecutionContext对象为作业实例提供有关其“运行时”环境的信息 ( 调度程序执行的逻辑),触发执行的触发器的逻辑。
JobDetail对象是在Job添加到调度器时由Quartz.NET客户端创建的。它包含Job的各种属性设置,以及一个JobDataMap,它可以用来存储作业类的给定实例的状态信息
触发器对象用于触发作业的执行(或“触发”)。当你想安排一个工作,你实例化一个触发器并“调整”它的属性来提供你想要的调度。触发器也可能有一个与它们相关的JobDataMap- 这对于传递参数到一个特定于触发器的触发的Job是很有用的。Quartz提供了一些不同的触发器类型,但最常用的类型是SimpleTrigger(接口ISimpleTrigger)和CronTrigger(接口ICronTrigger)。
如果您需要“一次性”执行(在某个特定时间只执行一项作业),或者您需要在给定时间开始工作,并且重复执行N次,SimpleTrigger会很方便的T之间执行。如果您希望基于类似日历的时间表(例如“每个星期五,中午”或“每个月的第10天的10:15”)触发,则CronTrigger非常有用。

public class UserInfoController : ABPCMSControllerBase { private readonly ISystemSchedulerService _iSystemSchedulerService; public UserInfoController(ISystemSchedulerService iSystemSchedulerService) { _iSystemSchedulerService = iSystemSchedulerService; } [HttpGet] [DontWrapResult] public async Task<ActionResult> GetUserInfo() { _iSystemSchedulerService.StartScheduler(); } }

然后我们在前台控制器里面调用ISystemSchedulerService的StartScheduler()方法。然后运行项目。
然后我们打开日志Web\App_Data\Logs\Logs.txt,看下效果:

每隔十秒钟执行一次。

Abp.Quartz

ABP有內建的持久化后台job队列和后台worker系统。如果对于后台workers你有更高级的计划安排需求,Quartz会是一个更好的选择。对于持久化后台job队列,Hangfire也是一个好的选择。
ABP中Quartz应用其实蛮简单的。

首先Abp.Quartz nuget包

然后加上引入到项目中。

[DependsOn( typeof(AbpQuartzModule) )] public class ABPCMSWebModule : AbpModule { }

创建Jobs
 这里我们就用上面例子中的job,当然创建一个新job,你可以实现Quartz的IJob接口,或者继承JobBase类(定义在Abp.Quartz包),这个类包含一些帮助属性和方法(例如日志和本地化)。

public class MyLogJob : JobBase, ITransientDependency { public override void Execute(IJobExecutionContext context) { Logger.Info("Executed MyLogJob :)"); } }

4.创建调度作业
IQuartzScheduleJobManager接口被用来创建调度作业。你可以在类中注入该接口(或者你可以在你的模块的PostInitialize方法中解析和使用它)来调度作业。这里我们把之前创建的MyLogJob引用进来。
效果如下:

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(); }); }); _jobManager.Start(); return Content("OK, scheduled!"); }

效果一样。

经过上面四步,就完成Abp.Quartz运用,是挺简单的。

扩展

####SimpleTrigger

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

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