Quartz.NET浅谈一 : 简单Job使用(定时发送QQ邮件)
Quartz.NET是一个全功能的开源作业调度系统,可用于从最小的应用程序到大型企业系统。
直接上代码吧。。。
一、新建一个控制台项目
略过
二、安装Nuget包

三、创建发送邮箱辅助工具类
static class EmailHelper
{
public static void SendEmail(Email email)
{
try
{
// 邮件类。
MailMessage mailMessage = new MailMessage(); // 发件人邮箱
mailMessage.From = new MailAddress(email.addFrom); // 收件人邮箱
mailMessage.To.Add(new MailAddress(email.addTo)); // 邮件标题。
mailMessage.Subject = email.subject; // 邮件内容。
mailMessage.Body = email.body; #region 配置客户端信息
// 客户端
SmtpClient client = new SmtpClient(); // smtp.qq.com 默认QQ邮箱
if (string.IsNullOrEmpty(email.host))
{
client.Host = "smtp.qq.com";
}
else
{
client.Host = email.host;
} // 邮件服务器端口
client.Port = ; // 使用安全加密连接。
client.EnableSsl = true;
client.UseDefaultCredentials = false; // 发件人的邮箱,自己邮箱里的生成授权码 (使用第三方发送qq邮件需要授权码)
client.Credentials = new NetworkCredential(email.addFrom, "自己的授权码");
#endregion //发送
client.Send(mailMessage); Console.WriteLine("发送成功 !");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
四、创建Job调度器
CronTrigger触发器公式参考 https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html
public class SchedulerHelper
{
IScheduler scheduler;
ISchedulerFactory factory; public void StartScheduler(IJobDetail job = null, ITrigger trigger = null)
{
// 创建一个调度器
factory = new StdSchedulerFactory();
scheduler = factory.GetScheduler().Result;
scheduler.Start(); // 创建一个执行任务
if (job == null)
{
job = JobBuilder.Create<DemoJob>().WithIdentity("job1", "group1").Build();
} // 创建一个触发器 SimpleTrigger和CronTrigger
// 需要在给定的时间和重复次数执行一个作业,使用SimpleTrigger
// 有许多复杂的作业调度,使用CronTrigger,CronTrigger是基于Unix克隆表达式的。 // SimpleTrigger
//DateTimeOffset simpleRunTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
//if (trigger == null)
//{
// trigger = TriggerBuilder.Create()
// .WithIdentity("trigger1", "group1")
// .StartAt(simpleRunTime)
// .Build();
//} // CronTrigger
if (trigger == null)
{
trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/10 * * * * ?") // 每10秒执行一次
.Build();
} // 将任务与触发器注册到调度器中
scheduler.ScheduleJob(job, trigger); // 执行
scheduler.Start();
} public void ShutDownScheduler()
{
// 关闭
if (scheduler != null)
{
scheduler.Shutdown(true);
}
} }
五、创建Job
实现job的Execute方法,该方法中执行具体的操作。
class DemoJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
Stopwatch sw = new Stopwatch();
sw.Start();
CheckWorkRec.CheckData();
sw.Stop();
Console.WriteLine("Stopwatch总共花费{0}ms.", sw.Elapsed.TotalMilliseconds);
return null;
}
}
通过检查数据库,判断出异常数据,发送邮件进行提醒。

六、执行Job
class Program
{
static void Main(string[] args)
{
Console.WriteLine("正在等待调度Job ..... ");
// 开启JOB
new SchedulerHelper().StartScheduler();
Console.ReadKey();
}
}
七、执行结果


Quartz.NET浅谈一 : 简单Job使用(定时发送QQ邮件)的更多相关文章
- 使用Quartz框架定时发送预警邮件
1. Quartz定时发送预警邮件 1.1. 需求及实现思路 定时查询库存预警信息,一旦存在库存预警的商品,则发邮件通知相关人员 1.2. Quartz框架 Quartz是OpenSymph ...
- canvas浅谈 实现简单的自旋转下落
旋转和平移是2个基础的动画效果,也是复杂动画的基础. 如果是普通的页面只要设置transform属性很容易实现平移+旋转的组合效果,达到自旋转下落的效果.因为操作的直接是动作元素本身很容易理解. 但是 ...
- 浅谈Java简单实现的生产者与消费者问题
一.面对生产者和消费者的问题,首先我们得明白几点: 生产者:生产数据:消费者:消费数据.消费者在没有数据可供消费的情况下,不能消费:生产者在原数据没有被消费掉的情况下,不能生产新数据.假设,数据空间只 ...
- 基于springboot工程浅谈整合rabbitmq怎么样防止消息发送mq不丢失和消费mq的消息防止丢失
本文只针对springboot整合rabbitmq的消息防丢失,话不多说,上干货.... 设置发送mq消息不丢失实现思路 执行的方案: 第一步,要对队列,消息以及交换机进行持久化操作(保存到物理磁盘中 ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- 浅谈Spring中的Quartz配置
浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...
- SDUT OJ 数据结构实验之串一:KMP简单应用 && 浅谈对看毛片算法的理解
数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...
- iOS 核心动画 Core Animation浅谈
代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...
- 【Fiori系列】浅谈SAP Fiori的设计美感与发展历程
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[Fiori系列]浅谈SAP Fiori的设计美 ...
随机推荐
- 逆波兰表达式求值 java实现代码
根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说 ...
- JAVA相关知识
1.CopyOnWrite (1).在写操作的线程,会将数组复制出来一份进行操作.而原本的数组不会做改变. (2)读线程则不会受到影响,但是可能读到的是一个过期的数据. 在juc(java.util. ...
- 入门Docker,你要下载什么?注册什么?
此随笔根据前人经验改编并亲自实践.遇到问题提供出相应解决方法. 入门Docker,你要下载什么?注册什么? Docker.app你肯定是要下载的!此教程应用于MAC系统PC不保证适用 Docker f ...
- javascript设计模式之适配器模式
---恢复内容开始--- 定义: 是指讲一个接口转换成客户端希望 的另外一个接口,该模式使得原本不兼容的类可以一起工作.适配器模式的作用事解决两个软件实体间的接口不兼容的问题. 生活中的实例: USB ...
- 设置body样式问题
如果我给body设置成一个宽高为200px的正方形,背景为红色,但是整个html也变成了红色,而且是整个浏览器屏幕都是红的,怎么来处理,如下 给html单独设置一个背景颜色,比如为白色#fff,在给b ...
- SuperTab
Tab快捷键提示功能 下载 http://www.vim.org/scripts/script.php?script_id=1643 安装 # vi supertab.vmb : UseVimball ...
- grant_type为client_credentials和password二者的区别
最近工作中需要使用到oauth,注意到oauth客户端的grant_type值可以指定为client_credentials和password两种,很好奇所以网上搜索了一下,发现stackoverfl ...
- O - Can you find it?(二分查找)
O - Can you find it? Time Limit:3000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64 ...
- javascript_17-基本类型和引用类型
基本类型 直接存储值 Number . String .Boolean undefined.null 引用类型 存储引用 -Object.Array.Date.函数 包装基本类型--引用类型 func ...
- angularcli 第三篇(数据循环*ngFor、条件判断*ngIf)
1.数据循环 *ngFor (1)普通循环 <ul> <li *ngFor = "let item of list" > {{ item }} </l ...