前言

官网:https://www.quartz-scheduler.net/ 一款开源的任务定时器。

日常有很多地方需要定时刷新的,比如微信开发中的微信API token,或者定时清理一下缓存数据等,应用场景还是比较常见。

接下来介绍一下这个简单好用的库。

引用

在Nuget管理中添加引用: Quartz.dll

命名空间:

using Quartz;

using Quartz.Impl;

写一个Task

实现一个task,按时刷新API的token:

public async Task RefreshAzulApiTokenJob(IScheduler scheduler)
{
var tokenJobName = "RefreshAzulToken";
IJobDetail tokenJob = JobBuilder.Create<RefreshAzulTokenJob>()
.WithIdentity($"{tokenJobName}Job", $"{tokenJobName}Group")
.Build();
ITrigger tokenTrigger = TriggerBuilder.Create()
.WithIdentity($"{tokenJobName}Trigger", $"{tokenJobName}Group")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(RefreshAzulTokenInterval)
.RepeatForever())
.Build();
await scheduler.ScheduleJob(tokenJob, tokenTrigger);
}

主要是创建一个Job,这个Job就是一个要定时运行的Task,创建一个Trigger,在Trigger里面自定义设置interval时间。

Job实现

1.创建一个类,用来处理这个任务的业务逻辑,比如这个刷新token:

public class RefreshAzulToken
{
public static readonly ILogger logger;
private static readonly RedisUtils redisUtils; static RefreshAzulToken()
{
logger = LoggerFactory.GetLogger("RefreshAzulToken", EnvSettings.ElkAddress);
redisUtils = ChatbotApiServiceManager.RedisUtils;
}
public static async Task Excutor()
{
try
{
logger.Information(new ApiRequestEvent()
{
EventType = LogEventType.RefreshAzulTokenStart,
Message = $"Start to get api token..."
});
var tokenRequestUrl = EnvSettings.AzulTokenUrl;
string tokenPostData = "client_id=indigo&client_secret=2lw$IE6GIwsnlUYh&grant_type=client_credentials";
string tokenResponse = await AzulApiClient.AzulHttpClient(true, tokenRequestUrl, tokenPostData);
var token = JsonConvert.DeserializeObject<AzulAccessToken>(tokenResponse);
logger.Information(new ApiRequestEvent()
{
EventType = LogEventType.RefreshAzulTokenComplete,
Message = $"Refresh api token succeed, token:{token.AccessToken}"
});
redisUtils.SetAzulApiToken(token.AccessToken);
logger.Information(new ApiRequestEvent()
{
EventType = LogEventType.RefreshAzulTokenComplete,
Message = $"Save token into Redis succeed, token:{redisUtils.GetAzulApiToken()}"
});
}
catch (Exception ex)
{
logger.Error(new ExceptionEvent()
{
EventType = LogEventType.RefreshAzulTokenError,
Message = $"Refresh Azul api token failed.",
Exception = ex,
});
}
}
}

2.创建另外一个类,这个类继承Quartz中的IJob,调用上面业务逻辑的方法:

public class RefreshAzulTokenJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await RefreshAzulToken.Excutor();
}
}

这样一个简单的Task Job 就创建好了,RefreshAzulTokenJob 就是第一步里面创建Job的参数。

Job启动

在应用程序的starup.cs里,启动这个Scheduler Task:

TaskScheduler().Scheduler().GetAwaiter().GetResult();

推荐一款好用的任务定时器:Quartz的更多相关文章

  1. 推荐10款超级有趣的HTML5小游戏

    HTML5的发展速度比任何人的都想像都要更快.更加强大有效的和专业的解决方案已经被开发......甚至在游戏世界中!这里跟大家分享有10款超级趣味的HTML5游戏,希望大家能够喜欢! Kern Typ ...

  2. 【转】推荐10款最热门jQuery UI框架

    推荐10款最热门jQuery UI框架 原创 在进行Web开发时,并非所有的库都适合你的项目,但你仍需要收藏一些Web UI设计相关的库或框架,以在你需要的时候,加快你的开发效率.本文为你推荐10款非 ...

  3. 推荐一款Mac上好用的Markdown编辑器

    [TOC] 推荐一款Mac上好用的Markdown编辑器 正文 我算是一位Evernote的重度用户吧.之前也尝试过为知笔记,有道云笔记,微软的onenote,最后还是觉的Evernote.因为我喜欢 ...

  4. 推荐几款我一直在用的chrome插件(上)

    我用的chrome插件挺多的,所谓工欲善其事必先利其器,我热衷于搜寻好用的工具来让我平时的工作事半功倍.下面介绍几款我正在用的感觉还不错的插件,如果大家还有其它好用的(肯定有,chrome插件库太庞大 ...

  5. 推荐几款我一直在用的chrome插件(下)

    请先看:推荐几款我一直在用的chrome插件(上) 6. Pocket 可以很方便的保存文章.视频等供以后查看,即实现了“Read it later”功能.有了 Pocket,您可以将所有想下次读的内 ...

  6. 墙裂推荐4款js网页烟花特效

    以下是几款网页特效和一款软件: http://keleyi.com/keleyi/phtml/jstexiao/1.htm  http://keleyi.com/keleyi/phtml/jstexi ...

  7. 再次推荐一款逼真的HTML5下雪效果

    再次推荐一款逼真的下雪效果 效果图: 效果描述:之前推荐过一款下雪的jQuery插件之前的那款下降速度比较缓慢,今天推荐的这个下降速度比较快,大雪哇 使用方法:1.将index.html中的样式复制到 ...

  8. 【开发软件】推荐一款MAC OS X 下php集成开发环境mamp

      这里给大家推荐一款在mac上搭建WEB服务器环境的集成环境安装软件,非常的好用,需要的朋友可以拿去,不用谢 ^_^   之前苦于mac上搭建本地服务器之艰辛,找寻好久都没找到一款类似windows ...

  9. 推荐15款最佳的 jQuery 分步引导插件

    当用户浏览到一个网站,它可能从不知道如何浏览,如何操作网站或 Web 应用程序的内容和流程.在这篇文章中,我们编制了一些最好的 jQuery 引导插件列表.你会发现这些插件对于提高你的网站的整体用户体 ...

随机推荐

  1. 【最小生成树】Bzoj1232 [Usaco2008Nov]安慰奶牛cheer

    Description Farmer John变得非常懒, 他不想再继续维护供奶牛之间供通行的道路. 道路被用来连接N (5 <= N <= 10,000)个牧场, 牧场被连续地编号为1. ...

  2. 【链表+启发式合并】Bzoj1483 [HNOI2009] 梦幻布丁

    Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. Input 第 ...

  3. BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心

    BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心 题意: 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返 ...

  4. BZOJ_1878_[SDOI2009]HH的项链_莫队

    BZOJ_1878_[SDOI2009]HH的项链_莫队 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考 ...

  5. 前端教程(1)http协议的深刻理解

    一 HTTP协议简介 作为学习前端开发的开始,我们必须搞明白以下几件事 1.什么是互联网      互联网=物理连接介质+互联网协议     2.互联网建立的目的? 数据传输打破地域限制,否则的话,我 ...

  6. MIP技术进展月报第2期: 数据绑定,异步脚本加速

    一. 功能更新 1. mip-bind 上线,实现复杂交互 MIP bind 双向绑定机制和组件上线,提供双向绑定的特性:能够允许页面实现数据驱动功能,开发者可以在任意场景修改数据,并驱动页面元素变动 ...

  7. Jenkins 集成 SonarQube Scanner

    1.   安装Jenkins 下载安装包,这里我们下载war包 https://jenkins.io/download/ 运行jenkins.war的方式有两种: 第一种:将其放到tomcat中运行( ...

  8. ConstraintLayoutDemo【约束性布局知识梳理】【基于1.1.3】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在较新版本的Android Studio中新建项目默认使用 ConstraintLayout进行布局的. ConstraintLay ...

  9. java基础(七)-----深入剖析Java中的装箱和拆箱

    本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...

  10. 结合JDK源码看设计模式——组合模式

    前言: 相信大家都打开过层级很多很多的文件夹.如果把第一个文件夹看作是树的根节点的话,下面的子文件夹就可以看作一个子节点.不过最终我们寻找的还是文件夹中的文件,文件可以看做是叶子节点.下面我们介绍一种 ...