Quartz开发-插件开发

开发环境

.net 4.5.1
quartz.dll v2.4.1.0 依赖下面的dll
Common.Loggin.dll v3.3.1.0 依赖下面的dll
Common.Loggin.Core.dll v3.3.1.0

Quartz核心概念

1、Job 表示一个工作任务,业务代码的执行入口,业务代码需要继承Quartz.IJob接口并实现Execute方法,此方法即业务代码的入口函数
2、JobDetail 表示一个上体的可执行的调度程序
3、Trigger 代表一个调度参数的配置,调度方案与执行计划
4、Scheduler 代表一个调度容器,可以注册多个JobDetail和Trigger
5、SchedulerPlugin 调度插件,自定义插件需要继承 Quartz.Spi.ISchedulerPlugin
6、SchedulerListener 调度监听器,自定义需要继承 Quartz.ISchedulerListener
7、TriggerListener 触发器监听器,自定义需要继承 Quartz.ITriggerListener
8、JobListener 工作任务监听器,自定义需要继承 Quartz.IJobListener

插件开发

常见开发插件有三种类型
1、SchedulerPlugin
2、SchedulerListener
3、TriggerListener
4、JobListener

一、SchedulerPlugin
using Quartz;
using Quartz.Spi;
namespace QuartzTest
{
    class SchedulerPluginer : ISchedulerPlugin
    {
        public string Name => "myPluginer";
        //缓存Scheduler对象引用
        private static IScheduler _sched;  

        public void Initialize(string pluginName, IScheduler sched)
        {
            _sched = sched;            
        }

        public void Shutdown()
        {
        	//默认我们借助VS的自动实现代码,这里是一个抛出异常的语句,一定要处理掉,不然在程序结束的时候,会报异常的,
            Console.WriteLine("插件停止");
        }

        public void Start()
        {
			//这个插件的功能启动放在这里
			//比如注册Listener,下面介绍三种监听器的功能与基础开发,监听器只能监听,没啥控制能力
			//也可以做一些控制Job和Trigger的功能
			Console.WriteLine("插件开始");
        }
   }

以上代码就完成了一个插件的开发。但啥用处都没有

二、SchedulerListener
using Quartz;
namespace QuartzTest
{
    class SchedulerListener : Quartz.ISchedulerListener
    {
        public void JobAdded(IJobDetail jobDetail)
        {
        	//Job创建时调用
            Console.WriteLine("JobAdded");
        }

        public void JobDeleted(JobKey jobKey)
        {
        	//Job删除时调用
            Console.WriteLine("JobDeleted");
        }

        public void JobPaused(JobKey jobKey)
        {
        	//Job暂停时调用
            Console.WriteLine("JobPaused");
        }

        public void JobResumed(JobKey jobKey)
        {
        	//Job恢复时调用
            Console.WriteLine("JobResumed");
        }

        public void JobScheduled(ITrigger trigger)
        {
        	//Job关联触发器时调用
            Console.WriteLine("JobScheduled");
        }

        public void JobsPaused(string jobGroup)
        {
        	//Job按分组暂停时调用
            Console.WriteLine("JobsPaused");
        }

        public void JobsResumed(string jobGroup)
        {
        	//Job按分组恢复时调用
            Console.WriteLine("JobsResumed");
        }

        public void JobUnscheduled(TriggerKey triggerKey)
        {
        	//Job删除触发器时调用,在删除Job是也会调用
            Console.WriteLine("JobUnscheduled");
        }

        public void SchedulerError(string msg, SchedulerException cause)
        {
        	//出错
            Console.WriteLine("SchedulerError");
        }

        public void SchedulerInStandbyMode()
        {
        	//不知道
            Console.WriteLine("SchedulerInStandbyMode");
        }

        public void SchedulerShutdown()
        {
        	//调度容器停止时
            Console.WriteLine("SchedulerShutdown");
        }

        public void SchedulerShuttingdown()
        {
        	//不知道
            Console.WriteLine("SchedulerShuttingdown");
        }

        public void SchedulerStarted()
        {
            //调度容器启动完成
            Console.WriteLine("SchedulerStarted");
        }

        public void SchedulerStarting()
        {
        	//调度窗口启动
            Console.WriteLine("SchedulerStarting");
        }

        public void SchedulingDataCleared()
        {
        	//不知道
            Console.WriteLine("SchedulingDataCleared");
        }

        public void TriggerFinalized(ITrigger trigger)
        {
        	//触发器完成时,比如simple类型的触发器,在完成执行的次数后,就会调用此方法
        	//可以理解成一个触发器的生命周期结束了,并从调度容器中删除注册
            Console.WriteLine("TriggerFinalized");
        }

        public void TriggerPaused(TriggerKey triggerKey)
        {
        	//触发器暂停时
            Console.WriteLine("TriggerPaused");
        }

        public void TriggerResumed(TriggerKey triggerKey)
        {
        	//触发器恢复时
            Console.WriteLine("TriggerResumed");
        }

        public void TriggersPaused(string triggerGroup)
        {
        	//触发器按分组暂停
            Console.WriteLine("TriggersPaused");
        }

        public void TriggersResumed(string triggerGroup)
        {
       		//触发器按分组恢复
            Console.WriteLine("TriggersResumed");
        }
    }
}

三、TriggerListener
using Quartz;
namespace QuartzTest
{
    class TriggerListener : Quartz.ITriggerListener
    {
        public string Name => "MyTriggerListener";
        public TriggerListener()
        {
        	//初始化,只执行一次
            Console.WriteLine("init TriggerListener");
        }
        public void TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode)
        {
            //触发器执行完成
            //trigger参数可以获取到触发器的名称和分组,还有关联的Job名称
            //context 可以获取到此触发器的本次执行时间,开始时间,结束时间,下一次运行时间等这些参数
            Console.WriteLine("TriggerListener TriggerComplete");
        }

        public void TriggerFired(ITrigger trigger, IJobExecutionContext context)
        {
        	//触发器被触发,准备执行
            Console.WriteLine("TriggerListener TriggerFired");
        }

        public void TriggerMisfired(ITrigger trigger)
        {
        	//触发器错过计划执行时间时
            Console.WriteLine("TriggerListener TriggerMisfired");
        }

        public bool VetoJobExecution(ITrigger trigger, IJobExecutionContext context)
        {
        	//触发器即将执行,
        	//返回false允许执行
        	//返回true 本轮拒绝执行
            Console.WriteLine("TriggerListener VetoJobExecution");
            return false;
        }
    }
}
四、JobListener
using Quartz;
namespace QuartzTest
{
    class JobListener : Quartz.IJobListener
    {
        public string Name => "MyJobListener";

        public JobListener()
        {
        	//初始化
            Console.WriteLine("init JobListener");
        }
        public void JobExecutionVetoed(IJobExecutionContext context)
        {
        	//不知道,正常流程下没有出现过调用
            Console.WriteLine("JobListener JobExecutionVetoed");
        }

        public void JobToBeExecuted(IJobExecutionContext context)
        {
        	//Job即将执行
            Console.WriteLine("JobListener JobToBeExecuted");
        }

        public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
        {
        	//Job执行完成
            Console.WriteLine("JobListener JobWasExecuted");
        }
    }
}

获取触发器
TriggerKey tk = new TriggerKey("触发器名称");
Scheduler.GetTrigger(tk)  //返回一个触发器,能获取到触发器的基础属性资料,但不能获取运行时间这些资料
引用参考

https://www.w3cschool.cn/quartz_doc/
http://www.quartz-scheduler.org/ 这个在国内打开可能很慢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值