【Quartz】实现接口封装化(二)

news/2024/7/3 16:45:28
原文:【Quartz】实现接口封装化(二)

  前言  

  通过昨天的努力终于算是了解Quartz这个定时器的简单使用,为了更深一步的了解和基于以后希望在项目中能使用他。所有我对他做了一下简单的封装操作,便于以后从新建立新工作和触发器,也方便写的代码不是那么的杂乱无章,所有就使用接口的方式进行了封装调用,算是个工厂模式的运用吧。哈哈。

  接口类(IExample):

 废话就不多说了,想要实现简单就要有个统一的访问接口,然后让所有的任务去实现统一接口,这样我们只需要调用统一接口就知道了任务所包含的所有方法,管理也方便管理,添加任务只需要实现接口方法就可以了。听起来很单简哪。因为我是实现简单的例子所有我就实现了启动任务,返回当前调度器,暂停,修改四个方法:

public interface IExample{/// <summary>/// 启动当前任务/// </summary>/// <returns></returns>
        Task Run();/// <summary>/// 返回当前调度器/// </summary>/// <returns></returns>
        IScheduler GetScheduler();/// <summary>/// 暂停当前任务/// </summary>void Shutdown();/// <summary>/// 修改当前任务时间触发/// </summary>void ModiyTime();}

任务的继承:

还记得上一篇文章中我们的SimpleExample类吗?下面我们就首先让他继承IExample接口类:

    public class SimpleExample : BaseExample, IExample{#region 0.创建调度器public static ISchedulerFactory sf = new StdSchedulerFactory();public async Task<IScheduler> Ceart(){return await sf.GetScheduler();}#endregionpublic virtual async Task Run(){sched = await Ceart();//创建任务IJobDetail job = JobBuilder.Create<HelloJob>().WithIdentity("helloJob", "group1").Build();//创建触发器// DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);//定义触发规则ITrigger trigger = TriggerBuilder.Create().WithIdentity("trgTest", "group1")// .StartAt(runTime).WithCronSchedule("0/5 * * * * ?")     //5秒执行一次
                .Build();//将任务与触发器添加到调度器中await sched.ScheduleJob(job, trigger);//启动任务await sched.Start();}}
View Code

然后我又创建了很多工作组,你说什么没有 返回当前调度器,暂停,修改三个方法,没想到还是被你发现了。

父类实现:

由于在项目实际中我们回创建很多的任务组,任务不一样,但是基础方法都是通用的所有我们创建父类实现方法的公用。这样我们只需要注重我们的任务方法就行了。

    /// <summary>/// 扩展方法基类/// </summary>public class BaseExample{protected static  IScheduler sched = null;#region 1.返回当前调度器/// <summary>/// 返回当前调度器/// </summary>/// <returns></returns>public IScheduler GetScheduler(){return sched;}#endregion#region 2.暂停当前任务/// <summary>/// 暂停当前任务/// </summary>public void Shutdown(){if (sched != null){sched.Shutdown();}}#endregion#region 3.修改当前任务触发时间public void ModiyTime(){ITrigger trigger = TriggerBuilder.Create().WithIdentity("trg1", "group1")// .StartAt(runTime).WithCronSchedule("0/10 * * * * ?")     //10秒执行一次
               .Build();sched.RescheduleJob(trigger.Key, trigger);sched.Start();}#endregion}
View Code

这里创建好了之后,只需要在没添加一个任务继承此类即可实现了该类的方法,是不是这样看起来就简单多了。

下面就是我的大致层次:

写在这里也是给我一点记忆帮助,也为了刚接触的小伙伴能快速理解一下。东西不是很多也不很深很好理解。


http://lihuaxi.xjx100.cn/news/236209.html

相关文章

可构造样式表 - 通过javascript来生成css的新方式

可构造样式表是一种使用Shadow DOM进行创建和分发可重用样式的新方法。 使用Javascript来创建样式表是可能的。然而&#xff0c;这个过程在历史上一直是使用document.createElement(style)来创建<style>元素&#xff0c;然后通过访问其sheet属性来获得一个基础的CSSStyle…

上交2017计算机专业就业,上海交通大学计算机科学与工程系(CSE)

经过多轮的意向调整&#xff0c;最终确定的生产实习去向结果公示(请见附件)。原则上&#xff0c;经公示后结果不做调整。生产实习执行时间从7月24日到8月27日&#xff0c;请目前尚未就课题开展明细跟导师联系的同学在7月24日之前务必联系导师。一、实习报告要求1、从教务网站&a…

大主子表关联的性能优化方法

【摘要】主子表是数据库最常见的关联关系之一&#xff0c;最典型的包括合同和合同条款、订单和订单明细、保险保单和保单明细、银行账户和账户流水、电商用户和订单、电信账户和计费清单或流量详单。当主子表的数据量较大时&#xff0c;关联计算的性能将急剧降低&#xff0c;在…

微信小程序(canvas)画图保存到本地相册(wepy)

html标签部分 因为这个需要用户授权 所以需要使用button&#xff0c;画布使用的是canvas&#xff0c;这个可以参考小程序官方文档&#xff0c;代码如下 <button classbtn type"default" open-type"getUserInfo" tapexportImg>生成图片保存到本地&l…

学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...

你好&#xff1a;你的这种情况应该是系统调整或服务器维护造成的&#xff0c;在这两天还有很多网友无法进入主页&#xff0c;请耐心等待&#xff0c;新浪工作日人员会尽快将系统恢复&#xff01; 祝顺利&#xff01;多出好文章&#xff01; 博客临时故障&#xff0c;用新浪各种…

HTML5的十大新特性

为了更好地处理今天的互联网应用&#xff0c;HTML5添加了很多新元素及功能&#xff0c;比如: 图形的绘制&#xff0c;多媒体内容&#xff0c;更好的页面结构&#xff0c;更好的形式 处理&#xff0c;和几个api拖放元素&#xff0c;定位&#xff0c;包括网页 应用程序缓存&#…

机器学习进阶-图像形态学操作-腐蚀操作 1.cv2.erode(进行腐蚀操作)

1.cv2.erode(src, kernel, iteration) 参数说明&#xff1a;src表示的是输入图片&#xff0c;kernel表示的是方框的大小&#xff0c;iteration表示迭代的次数 腐蚀操作原理&#xff1a;存在一个kernel&#xff0c;比如(3, 3)&#xff0c;在图像中不断的平移&#xff0c;在这个9…

旋转卡壳——模板(对踵点)

这东西学了我大概两天吧。。其实不应该学这么久的&#xff0c;但是这两天有点小困&#xff0c;然后学习时间被削了很多\(QwQ\) 说几个坑点。 - 对于题目不保证有凸包的情况&#xff0c;要选用左下角的点&#xff0c;而非单纯的最下边的点构造凸包。 - 对于凸包中只有\(1/2\)个点…