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邮件)的更多相关文章

  1. 使用Quartz框架定时发送预警邮件

    1.  Quartz定时发送预警邮件 1.1.   需求及实现思路 定时查询库存预警信息,一旦存在库存预警的商品,则发邮件通知相关人员 1.2.   Quartz框架 Quartz是OpenSymph ...

  2. canvas浅谈 实现简单的自旋转下落

    旋转和平移是2个基础的动画效果,也是复杂动画的基础. 如果是普通的页面只要设置transform属性很容易实现平移+旋转的组合效果,达到自旋转下落的效果.因为操作的直接是动作元素本身很容易理解. 但是 ...

  3. 浅谈Java简单实现的生产者与消费者问题

    一.面对生产者和消费者的问题,首先我们得明白几点: 生产者:生产数据:消费者:消费数据.消费者在没有数据可供消费的情况下,不能消费:生产者在原数据没有被消费掉的情况下,不能生产新数据.假设,数据空间只 ...

  4. 基于springboot工程浅谈整合rabbitmq怎么样防止消息发送mq不丢失和消费mq的消息防止丢失

    本文只针对springboot整合rabbitmq的消息防丢失,话不多说,上干货.... 设置发送mq消息不丢失实现思路 执行的方案: 第一步,要对队列,消息以及交换机进行持久化操作(保存到物理磁盘中 ...

  5. 【转】.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 ...

  6. 浅谈Spring中的Quartz配置

    浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...

  7. SDUT OJ 数据结构实验之串一:KMP简单应用 && 浅谈对看毛片算法的理解

    数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  8. iOS 核心动画 Core Animation浅谈

    代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...

  9. 【Fiori系列】浅谈SAP Fiori的设计美感与发展历程

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[Fiori系列]浅谈SAP Fiori的设计美 ...

随机推荐

  1. enum的应用及flags特性

    enum的作用不做描述,这是C#的基础 设置enum 很简单,本文不做讨论. 但是enum设置值有种特殊方式,如 enum en { a=, b=, c=, d=, e=, …… } 你会发现这个枚举 ...

  2. This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.

    记事本打开csproj文件 搜索nuget 删除Target节点 类似如下: <Target Name="EnsureBclBuildImported" BeforeTarg ...

  3. 线程池ThreadPool实战

    线程池ThreadPool 线程池概念 常用线程池和方法 1.测试线程类 2.newFixedThreadPool固定线程池 3.newSingleThreadExecutor单线程池 4.newCa ...

  4. 从Iterator到async/await

    Generator和Async 引言 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程 ...

  5. Linux REDHAT 7 关闭、禁用防火墙服务

    1 查看防火墙状态 [root@lvxinghao ~]# systemctl status firewalld 2 查看开机是否启动防火墙服务[root@lvxinghao ~]# systemct ...

  6. 小程序canvas绘制倒计时

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 效果展示: //广告倒计时 advTimeCountDown:function(advTime ...

  7. c# 定时关闭 MessageBox 或弹出的模态窗口

    我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的.所以如果有以下代码: MessageBox.Show("内容',"标题"); 则只有关闭 ...

  8. 一道简单的广搜题:Knight Moves

    这本来是要用双向宽度搜索的,但是我用简单的广搜也成功了,L<=300,也不会超时?? 另外一个问题就是,我本来想用原来的代码交,结果80分??将边界条件从小于L改成小于等于L,就对了.我可能不会 ...

  9. 【Python学习】Python3 基本数据类型

    参考学习地址:https://www.runoob.com/python3/python3-data-type.html Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用 ...

  10. LightOJ - 1095 - Arrange the Numbers(错排)

    链接: https://vjudge.net/problem/LightOJ-1095 题意: Consider this sequence {1, 2, 3 ... N}, as an initia ...