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

CronTrigger实例使用TriggerBuilder(用于触发器的主属性)和WithCronSchedule扩展方法(用于CronTrigger特定的属性)构建。
您也可以使用CronScheduleBuilder的静态方法来创建计划。
建立一个触发器,每隔上午8点到下午5点,每隔一分钟一次:

trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 0/2 8-17 * * ?") .ForJob("myJob", "group1") .Build();

建立一个触发器,每天在上午10:42开始:

// we use CronScheduleBuilder's static helper methods here trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 42)) .ForJob(myJobKey) .Build();

要么 -

trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 42 10 * * ?") .ForJob("myJob", "group1") .Build();

建立一个触发器,将在星期三上午10:42,在系统默认的时区以外的其他时间触发:

trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithSchedule(CronScheduleBuilder .WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42) .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .ForJob(myJobKey) .Build();

要么 -

trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 42 10 ? * WED", x => x .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .ForJob(myJobKey) .Build();

以下指令可用于通知Quartz在CronTrigger发生停止作业时应该执行的操作。(本教程的“更多关于触发器”部分介绍了停止作业情况)。这些指令被定义为常量(并且API文档具有对其行为的描述)。说明包括:

MisfireInstruction.IgnoreMisfirePolicy

MisfireInstruction.CronTrigger.DoNothing

MisfireInstruction.CronTrigger.FireOnceNow

所有触发器都有MisfireInstrution.SmartPolicy指令可供使用,并且此指令也是所有触发器类型的默认值。CronTrigger将“智能策略”指令解释为MisfireInstruction.CronTrigger.FireOnceNow。CronTrigger.UpdateAfterMisfire()方法的API文档解释了此行为的确切详细信息。
在构建CronTriggers时,您可以将缺火指令指定为cron时间表的一部分(通过WithCronSchedule扩展方法):

trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 0/2 8-17 * * ?", x => x .WithMisfireHandlingInstructionFireAndProceed()) .ForJob("myJob", "group1") .Build(); 其他

我们可以看一下,源码中对IQuartzScheduleJobManager的ScheduleAsync方法的封装,其实就是Scheduler.ScheduleJob处理了一下。

如果要使用模块的PostInitialize方法中解析和使用它来调度作业,也是可以的。

using System.Reflection; using Abp.Dependency; using Abp.Modules; using Abp.Quartz.Configuration; using Abp.Threading.BackgroundWorkers; using Quartz; namespace Abp.Quartz { [DependsOn(typeof (AbpKernelModule))] public class AbpQuartzModule : AbpModule { public override void PreInitialize() { IocManager.Register<IAbpQuartzConfiguration, AbpQuartzConfiguration>(); Configuration.Modules.AbpQuartz().Scheduler.JobFactory = new AbpQuartzJobFactory(IocManager); } public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); } public override void PostInitialize() { IocManager.RegisterIfNot<IJobListener, AbpQuartzJobListener>(); Configuration.Modules.AbpQuartz().Scheduler.ListenerManager.AddJobListener(IocManager.Resolve<IJobListener>()); if (Configuration.BackgroundJobs.IsJobExecutionEnabled) { IocManager.Resolve<IBackgroundWorkerManager>().Add(IocManager.Resolve<IQuartzScheduleJobManager>()); } } } }

JobBase封装的一些方法,继承自IJob

image.png

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

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

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