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 = 25; // 使用安全加密连接。 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(); } }
七、执行结果