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的设计美 ...
随机推荐
- angularjs 文件下载 并 从response header中获取文件名
最近在做一个下载文件的功能,后台接口给的是二进制流的方式,那么前端要把二进制流下载下来. 这个过程使用$http的get请求,使用Blob接收,倒是没有难度,主要是遇到了,后台的文件名拿不到 的问题. ...
- 前端开发 vue,angular,react框架对比1
转载自:https://www.cnblogs.com/hubgit/p/6633214.html 首先,我们先了解什么是MVX框架模式? MVX框架模式:MVC+MVP+MVVM 1.MVC:Mod ...
- 怎样用 vue-i18n这个结合vue的$t来实现通过data传值的翻译
<el-row class="searchForm"> <template v-for="(item,index) in searchConfig&qu ...
- org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的解决方案
org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的解决方案 背景描述 Sprin ...
- Spring-Security-Oauth2 基于JDBC存储令牌和RBAC权限认证
相关配置来自李哥博客: https://funtl.com/zh/spring-security-oauth2/ (本文仅记录自己学习过程,说的不详细,可以观看李哥博客) 认证服务器和资源服务器 ...
- Kotlin构造方法详解与初始化过程分析
在上一次https://www.cnblogs.com/webor2006/p/11192025.html已经初识了Kolin的面向对象,先来回顾一下: 介绍了primary 构造方法,其特点回忆一下 ...
- Servlet的入门
什么是Servlet? Servlet是运行在服务端的java小程序,是sun公司提供的一套规范,用来处理客户端请求.响应给浏览器的动态资源.Servlet是JavaWeb三大组件之一(Setvlet ...
- 《The One!团队》:BETA Scrum metting3
项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)掌握软件黑盒测试技术:(2)学会编制软件项目总结PPT.项目验收报告:(3) ...
- K-means: 多次random initialization来避免bad局部最优
K-means algorithm initialize K-means算法中有一步为随机初始化cluster centroids,这步如何进行,我们将介绍一种运行比较好的方法,这种方法比其它初始化的 ...
- c# 数据类型转换
隐式转换 byte, short, int, long, fload, double等根据其顺序向后可以隐式自动完成类型的转换,隐式转移的前提是目标类型精度高于源类型,如:short隐式转换为int, ...