【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();
}
#endregion
public 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();
} }
然后我又创建了很多工作组,你说什么没有 返回当前调度器,暂停,修改三个方法,没想到还是被你发现了。
父类实现:
由于在项目实际中我们回创建很多的任务组,任务不一样,但是基础方法都是通用的所有我们创建父类实现方法的公用。这样我们只需要注重我们的任务方法就行了。
/// <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 }
这里创建好了之后,只需要在没添加一个任务继承此类即可实现了该类的方法,是不是这样看起来就简单多了。
下面就是我的大致层次:

写在这里也是给我一点记忆帮助,也为了刚接触的小伙伴能快速理解一下。东西不是很多也不很深很好理解。
【Quartz】实现接口封装化(二)的更多相关文章
- MySql C++调用库Connector/c++编译 和 接口封装【二】Connector/c++编译
二.Connector/c++库的编译: 1.把MySql数据库安装完成后,把bin目录加入环境变量. 2.下载boost库,官网就有下载: http://www.boost ...
- 基于Zabbix API文档二次开发与java接口封装
(继续贴一篇之前工作期间写的经验案例) 一. 案例背景 我负责开发过一个平台的监控报警模块,基于zabbix实现,需要对zabbix进行二次开发. Zabbix官方提供了Rest ...
- Java微信公众平台接口封装源码分享
前言: 这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...
- C++ Redis mset 二进制数据接口封装方案
C++ Redis mset 二进制数据接口封装方案 需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在r ...
- 基于Verilog的带FIFO输出缓冲的串口接收接口封装
一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...
- (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
http://blog.csdn.net/zixiao217/article/details/53044890 读完第一节,我们已经对Quartz有了一个大体的认识,它可以定时帮我们执行一些处理程序, ...
- 微信小程序“一劳永逸”的接口封装
前言 最近都在研究小程序了,我可以的! 需求 之前都是用vue来开发项目的,接口模块我特意封装了一下.感觉也可以记录一下 小程序的接口虽说简单,但是重复调用那么多,显得不专业(一本正经的胡说八道) 还 ...
- iOS开发——开发必备OC篇&UITableView设置界面完整封装(二)
UITableView设置界面完整封装(二) 简单MVC实现UITableView设置界面之Cell右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...
- hiredis异步接口封装并导出到Lua
hiredis异步接口封装并导出到Lua(金庆的专栏 2017.1)hiredis 不支持 Windows, Windows 下使用 wasppdotorg / hiredis-for-windows ...
随机推荐
- BeanUtil拷贝
拷贝vo对象 一些查询到的数据很多是不需要的,可以创建vo对象,对需要的对象属性进行拷贝 maven依赖 <dependency> <groupId>org.projectlo ...
- UVa 11481 Arrange the Numbers (组合数学)
题意:给定 n,m,k,问你在 1 ~ n 的排列中,前 m 个恰好有 k 个不在自己位置的排列有多少个. 析:枚举 m+1 ~ n 中有多少个恰好在自己位置,这个是C(n-m, i),然后前面选出 ...
- 11-22 ArrayList
自己定义一个类 public class Student{ public String name; //属性 public void fangfa(){ //方法 } } 在另一个java文件里可以调 ...
- 32 bit 与 64 bit 程序(2)比较
32 bit 与 64 bit 程序(2)区别 由于操作系统内存分配的不同,导致软件开发过程中,需要编译不同版本的软件. 几个重要概念: (1)这里所说的的32位与64位程序,是指经过编译器编译后 ...
- PLSQL基础知识-图片
什么是PL/SQL?
- cookie&session的Q&A故事[原理篇]
引语:cookie和session在网站开发中,起着无可厚非的重要作用,但是我们平时往往都只是通过某种语言作为介质,通过某些接口函数进行cookie和session的操作,而对其原理可能不了解或一知半 ...
- PHP画矩形,椭圆,圆,画椭圆弧 ,饼状图
1:画矩形: imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ) imagere ...
- 使用Go语言访问JSON数据(gojsonq)
使用Go语言访问JSON数据(gojsonq) 主要是使用第三方的库 gojsonq,来查询JSON数据 例如这样的JSON数据 { "name":"computers& ...
- 来了!阿里开源分布式事务解决方案 Fescar
摘要: 阿里妹导读:广为人知的阿里分布式事务解决方案:GTS(Global Transaction Service),已正式推出开源版本,取名为“Fescar”,希望帮助业界解决微服务架构下的分布式事 ...
- 使用Windows的mstsc远程桌面连接到Ubuntu图形界面(AWS上安装的Ubuntu系统)
参考文档:https://blog.csdn.net/liumaolincycle/article/details/50052619 https://www.cnblogs.com/eczhou/p/ ...