zoukankan      html  css  js  c++  java
  • .net 定时任务调度

    前段时间开发个项目需要自定义时间定时发送邮件,此处使用了Quartz 定时任务,在此记录下:

            /// <summary>
            /// 创建定时任务 
            /// </summary>
            /// <param name="checkData">报告生成时间</param>
            /// <param name="timer">报告发送使劲</param>
            public void CreateTimingJob(DateTime checkData, DateTime timer)
            {
                ISchedulerFactory sf = new StdSchedulerFactory();
                IScheduler scheduler = sf.GetScheduler();//创建调度实例
                //job 名称 命名规则:JobSendEmailTimer+ 报告生成时间
                string JobName = "JobSendEmailTimer" + checkData.ToShortDateString().ToString();
                //创建任务实例
                IJobDetail job = JobBuilder.Create<SendEmailJob>().WithIdentity(JobName, "JobSendEmailTimer").
                    UsingJobData("reportGenerationDate", checkData.ToShortDateString()) //传参 
                    .Build();
                var seconds=timer.Second;
                var minutes = timer.Minute;
                var hours = timer.Hour;
                var day = timer.Day;
                var month = timer.Month;
                var year = timer.Year;
    
                var timerSetting = seconds + " " + minutes + " " + hours + " " + day + " " + month + " " + "? " + year;
                // 0 0 0 0 0 0 0 秒 分 时 日 月 周 年
                ITrigger trigger = TriggerBuilder.Create().StartAt(DateTime.Now.AddSeconds(0)).WithCronSchedule(timerSetting).Build();
                scheduler.ScheduleJob(job,trigger);
                scheduler.Start();
                
            }
      public class SendEmailJob:IJob
        {
            public void Execute(IJobExecutionContext context)
            {
    
                //获取传入的参数数据
                string data = context.MergedJobDataMap.GetString("reportGenerationDate");
    
                ReportController reportController = new ReportController();
    
                reportController.SendEmailTimer(data);
            }
    
        }
            //删除定时任务
            public ApiResult<string> Delete(int id)
            {
                if (id > 0)
                {
                    var result = DeleteEntity(id);
                    //在这里获取数据库定时任务配置记录
                    var sql = $@"select * from TimerConfig s where s.Id={id}";
                    var timerResult= DbHelper.GetModel<TimerConfig>(sql);
                    if (timerResult != null)
                    {
                        //job 命名规则
                        var JobName = "JobSendEmailTimer"+timerResult.ReportGeneratedDate.ToShortDateString().ToString();//
    
                        TriggerKey triggerKey = new TriggerKey(JobName, "JobSendEmailTimer");
                        ISchedulerFactory sf = new StdSchedulerFactory();
                        IScheduler scheduler = sf.GetScheduler();
                        scheduler.PauseTrigger(triggerKey);//停止触发器
                        scheduler.UnscheduleJob(triggerKey);//移除触发器
                        scheduler.DeleteJob(new JobKey(JobName, "JobSendEmailTimer"));//删除任务
                    }
    
                    return result;
                }
                return ApiResult<string>.Failed("删除失败!");
            }
  • 相关阅读:
    使用EntityFramework之Code First开发与MySql数据库问题一例
    使用Emit创建DBContext对象
    一个实用的Metro滚屏效果示例
    合理使用EntityFramework数据验证的异常错误提示信息
    Metro app中使用内存流压缩和解压
    64位的windows操作系统上运行32位asp.net web应用程序的时候,出现试图加载格式不正确的程序的解决方法
    VSTO中自定义XML功能区实现Ribbon控件互相更新
    基于任务并行库实现多线程下载示例
    Android系统刷机成功后网络信号显示“无服务”修正
    Solution Explorer中显示依赖文件和链接文件
  • 原文地址:https://www.cnblogs.com/zty-Love/p/11910551.html
Copyright © 2011-2022 走看看