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的设计美 ...
随机推荐
- Eclipse开发环境(二):配置
二.高级设置 1. 工作空间 在打开软件时,会提示用户选择工作空间,之后在Eclipse中创建的项目都会保存在这个工作空间(目录)下面. 在此把工作空间定为D:\workspaces\eclipse- ...
- SQL Server修改表的模式schema
use myDBgo create schema myschema --先建立go alter schema myschema transfer dbo.myTable --移动对象至建立的schem ...
- mySql入门-(二)
最近刚刚开始学习Mysql,然而学习MySql必经的一个过程就是SQL语句,只有按照文档从头开始学习SQL语句.学习的过程是痛苦的,但是学完的成果是甘甜的. SQL 语法 所有的 SQL 语句都以下列 ...
- day27-python之迭代器协议
1.item系列方法 # class Foo: # def __getitem__(self, item): # print('getitem',item) # return self.__dict_ ...
- Swift面试题
class 和 struct 的区别 1.struct是值类型,class是引用类型. 值类型的变量直接包含它们的数据,对于值类型都有它们自己的数据副本,因此对一个变量操作不可能影响另一个变量. 引用 ...
- iOS-H5交互综合整理
1.WKWebView的使用 2.常见问题 2.1 iOS开发 WKWebView下js的alert(),confirm(),prompt()方法无法正常执行
- MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK(转)
1 引擎说明 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的 数据库链接(DBLINK). 要允许这个存储引擎, 当 ...
- es5中变量提升的问题
<script> //变量提升的问题 var tem=new Date(); //函数f 输出tem var命令会发生“变量提升”现象 //局部变量优先高于全局变量 var tem=&qu ...
- TFTP启动内核、设备树,NFS启动FS
一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E6321. 二.问题 ...
- [堆栈]Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
转自:https://blog.csdn.net/yangkuanqaz85988/article/details/52403726 问题1:不同线程/进程拥有着不同的栈,那系统所有的中断用的是同一个 ...