【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
这里创建好了之后,只需要在没添加一个任务继承此类即可实现了该类的方法,是不是这样看起来就简单多了。
下面就是我的大致层次:
写在这里也是给我一点记忆帮助,也为了刚接触的小伙伴能快速理解一下。东西不是很多也不很深很好理解。
【Quartz】实现接口封装化(二)相关推荐
- 快速封装一个二维码在线生成接口
方法一:利用接口,生成二维码 这种方法生成的二维码最简单,你只需要调用别人提供的二维码生成接口,同时传递相应的参数即可. <?php /*** @author DengPeng <3@de ...
- 高德地图和百度地图接口封装遇到的问题(二):绘制带有方向箭头的折线
临时接到一个小任务,要封装一个绘制带有方向箭头的折线的功能接口,就下面这种样式: 百度地图给的示例是这样的: var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BA ...
- jeewx-api 1.0.5 版本发布,微信SDK接口封装(支持微信第三方开放平台)
JeeWx-api 1.0.5 版本发布,微信SDK接口封装 1.jeewx-api为何诞生 现在微信越来越火,基于微信的公众号和服务号越来越丰富,虽然微信帮助文档已经提供了相关的接口,但是接口比较多 ...
- (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务...
http://blog.csdn.net/zixiao217/article/details/53044890 读完第一节,我们已经对Quartz有了一个大体的认识,它可以定时帮我们执行一些处理程序, ...
- 微信支付接口调用之二维码失效时间的设置
今天解决了测试提交上来的一个bug,说是公司网站调用的二维码接口没有做超时失效处理,这种情况容易导致用户账号登出后,该二维码还是有效的,当用户扫描支付时还是能够支付成功,但是微信支付成功后调用我们配置 ...
- 浅析 uniapp(Vue) 的接口封装方法
浅析 uniapp(Vue) 的接口封装方法 本文将详细讲解封装思路,通过对接口请求进行封装,实现接口引入即用,减少了请求复杂的属性参数,更加关注数据与业务本身. config - 请求地址及相关参数 ...
- axios封装,api接口封装统一管理
axios封装,api接口封装统一管理 一. axios说明 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. axios的封装和api接口的统一管理, ...
- 接口自动化测试-接口封装思想
目录 一.接口测试封装思想 二.测试框架 三.架构管理 一.接口测试封装思想 配置--根据配置文件获取初始配置和依赖 接口封装--1.封装接口调动进行抽象封装 --2.类似PageObject效果 业 ...
- vue2.0 + vux (五)api接口封装 及 首页 轮播图制作
1.安装 jquery 和 whatwg-fetch (优雅的异步请求API) npm install jquery --save npm install whatwg-fetch --save 2. ...
最新文章
- JQuery EasyUI的常用组件
- 【TensorFlow2.0】(1) tensor数据类型,类型转换
- 中文Visual Studio 2005 Express Beta2不能安装在英文Longhorn Beta1上吗?
- WindowsServer2012 R2 64位中文标准版(IIS8.5)下手动搭建PHP环境详细图文教程(二)安装IIS8.5...
- 实时视频传输中的BBR拥塞控制
- LeetCode 32. Longest Valid Parentheses
- 【Pytorch神经网络实战案例】21 基于Cora数据集实现Multi_Sample Dropout图卷积网络模型的论文分类
- 数据结构与算法-常见时间复杂度
- .NET BackgroundWorker的一般使用方式
- java给文件添加水印_Java在PDF中添加水印(文本/图片水印)
- 2012/7/9Intel面试题目
- 酒店管理系统-概要设计报告
- 显示硬件发展与视频开发系列(4)----移动时代
- linux中rar文件包的解压方式
- 如何准备国家公务员考试
- linux学习杂碎:权限
- 2022-2023年华南师范大学工商管理硕士(MBA)招生简章
- OSPF——5种报文(图解)
- 程序猿赚的那点钱算个P啊!
- 【服务器数据恢复】服务器卷被误删除的raid5数据恢复案例
热门文章
- 匹配3位或4位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔...
- vs2005 打sp1补丁失败的解决办法
- USB获取图像实时处理
- gitlab报错 fatal: index-pack failed error: RPC failed; result=18, HTTP code = 200解决方案
- Varnish 和 Squid比较到底强多少
- 快速开发一个PHP扩展
- asp.net 2.0 权限树的控制
- Ubuntu14.04上安装TensorRT 2.1操作步骤
- Microsoft Platform SDK Febrary 2003更新vc6的SDK网址
- 【SVN】svn“E155017工作副本的参考文件损坏、E200014文件校验和不匹配”的解决方法