前言  

通过昨天的努力终于算是了解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】实现接口封装化(二)的更多相关文章

  1. MySql C++调用库Connector/c++编译 和 接口封装【二】Connector/c++编译

    二.Connector/c++库的编译:     1.把MySql数据库安装完成后,把bin目录加入环境变量.          2.下载boost库,官网就有下载: http://www.boost ...

  2. 基于Zabbix API文档二次开发与java接口封装

    (继续贴一篇之前工作期间写的经验案例) 一.           案例背景 我负责开发过一个平台的监控报警模块,基于zabbix实现,需要对zabbix进行二次开发. Zabbix官方提供了Rest ...

  3. Java微信公众平台接口封装源码分享

    前言:      这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...

  4. C++ Redis mset 二进制数据接口封装方案

    C++ Redis mset 二进制数据接口封装方案 需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在r ...

  5. 基于Verilog的带FIFO输出缓冲的串口接收接口封装

    一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...

  6. (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务

    http://blog.csdn.net/zixiao217/article/details/53044890 读完第一节,我们已经对Quartz有了一个大体的认识,它可以定时帮我们执行一些处理程序, ...

  7. 微信小程序“一劳永逸”的接口封装

    前言 最近都在研究小程序了,我可以的! 需求 之前都是用vue来开发项目的,接口模块我特意封装了一下.感觉也可以记录一下 小程序的接口虽说简单,但是重复调用那么多,显得不专业(一本正经的胡说八道) 还 ...

  8. iOS开发——开发必备OC篇&UITableView设置界面完整封装(二)

    UITableView设置界面完整封装(二) 简单MVC实现UITableView设置界面之Cell右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...

  9. hiredis异步接口封装并导出到Lua

    hiredis异步接口封装并导出到Lua(金庆的专栏 2017.1)hiredis 不支持 Windows, Windows 下使用 wasppdotorg / hiredis-for-windows ...

随机推荐

  1. 7. The British Thached Roof 英国的茅草屋顶

    7. The British Thached Roof 英国的茅草屋顶 (1) The view over a valley of a tiny village with thatchd roof c ...

  2. visual studio 2013怎样快速查看代码函数关系--代码图

    可以发现没有调试运行代码时是无法查看代码图的,可以在某行加一个断点,如下图,并开始debug调试: 这时,就会在代码调试工具栏看到代码图按钮,点击它: 右边就会出现代码图了: 这下就方便多了. 不仅适 ...

  3. MyBatis-Plus 多库部署方式;spring mvc 多库部署方式

    1.实现mybatis-plus的多个数据库的切换方式 源码地址:https://github.com/baomidou/mybatisplus-spring-mvc 2.因为其文档都是相互依赖的,所 ...

  4. js-运动函数(盒子运动)

    注意move的js包在另一篇文章 <!DOCTYPE html><html> <head> <meta charset="UTF-8"&g ...

  5. 【BZOJ】 Hash Killer I II III

    前言 这里只是一个整理... Solution Hash Killer I Hash Killer II

  6. 【洛谷4770】 [NOI2018]你的名字(SAM,线段树合并)

    传送门 洛谷 Solution 做过的比较玄学的后缀自动机. 果然就像\(Tham\)所讲,后缀自动机这种东西考场考了不可能做的出来的... 考虑如果\(l=1,r=|S|\)的怎么做? 直接建后缀自 ...

  7. Jira/Confluence的备份、恢复和迁移

    之前的文章已经分别详细介绍了Jira.Confluence的安装及二者账号对接的操作方法,下面简单说下二者的备份.恢复和迁移: 一.Jira.Confluence的备份.恢复1)Confluence的 ...

  8. Elastic-search在linux上的安装

    今天是我装第四次 ES ,之前装好用了一段时间,后面莫名其妙爆炸了,炸出一堆异常... 安装环境: JDK1.8   centos    ElasticSearch-6.2.4 jdk1.8以上,所以 ...

  9. typescript handbook 学习笔记4

    概述 这是我学习typescript的笔记.写这个笔记的原因主要有2个,一个是熟悉相关的写法:另一个是理清其中一些晦涩的东西.供以后开发时参考,相信对其他人也有用. 学习typescript建议直接看 ...

  10. Win10手记-IIS部署网站问题解决

    最近在自己的Win10电脑上尝试部署ASP.NET网站时出现了问题,经过多方查找定位到IIS为问题来源. 开始之前 先描述下技术环境: 1.Windows 10 PC 2.Windows 自带的IIS ...