.net core(.NET 6)搭建基于Quartz组件的定时调度任务
搭建基于Quartz组件的定时调度任务
先在package包项目下,添加Quartz定时器组件:
新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目。然后新建一个中间调度类,叫QuartzMiddleJob:
中间Job源码:
新建一个Job工厂类,叫WeskyJobFactory,用来获取刚刚创建的中间调度类的服务:
新建一个通用执行计划类,叫WeskyJobSchedule,用于每次任务都通过该计划进行生成:
计划类和枚举源码:
现在添加一个任务,新建任务类 MyJobs,并且继承自IJob,然后在Excute方法里面,就是该任务执行调度时候会进去执行的了:
似乎上面哪儿感觉不太对,咱们把原来的Job工厂里面到代码稍微调整下如下:
NewJob源码:
现在新增一个静态类QuartzJobService,用来当做调度任务的中间启动项,并且把有关的一些服务注册进来:
对应源码:
最后,还少了个启动项,用来程序启动的时候,进行启动定时调度任务。新建类 WeskyJobHostService ,并且新建创建调度任务方法 CreateJob和触发器方法CreateTrigger:
然后,在开始和结束方法内:
以上源码如下:
切回QuartzJobService,在 AddQuartzJobService 方法的最下方,添加上面启动服务的注册:
最后,在启动项目里面,添加对Wsk.CoreQuartz项目的引用,然后在WskService服务类下,添加对AddQuartzJobService服务的注册:
启动项目,看看效果:
由此可见,我们设置的每秒一次触发效果达成。为了检验是不是可以避免同一个调度任务产生并发,在调度任务方法里面,设置一个延时,看看效果:
运行结果:
说明在当前任务还没有完成的情况下,不会重复进入。如果要允许重复进,只需要把类上面的DisallowConcurrentExecution 标签注释掉就可以。
现在还原回去,然后在Cron表达式改写成定时10秒,看看效果:
运行结果:
以上就是本篇使用QuartzNet的全部内容,仅用于入门参考。对于其他定时用法、以及各种比较飘的使用,各位大佬可以自行变种。如果有什么建议或意见,也欢迎留言~~需要学习资料的可以关注我加V:MaXiaoLi502 回复 “学习” 即可~