zoukankan      html  css  js  c++  java
  • 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 = 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();
            }
        }

    七、执行结果

  • 相关阅读:
    asp.net 自定义文本框
    单机运行k8s以及e2e
    编译k8s1.3的代码
    etcd的简单使用
    How Tencent Tests Software
    ps引发的血案
    配置IDE查看kubernetes源码
    读书笔记<<不懂带人,你就自己干到死>>
    书摘<<互联网世界观>>
    读书笔记《异类》
  • 原文地址:https://www.cnblogs.com/teyigou/p/9087618.html
Copyright © 2011-2022 走看看