C#mvc使用Quartz定时调用某程序

首先说下我的需求:在MVC项目启动时定时执行项目中编写好的接口,半个小时执行一次

1  首先需要在项目中引用Quartz.dll

C#mvc使用Quartz定时调用某程序

2 找到全局程序类Global.asax程序的开始启动(Application_Start)中写调度任务(我是把调度任务放到了SynChronize_JL类中

C#mvc使用Quartz定时调用某程序

3重点来了Quartz任务调度的编写(如果想了解Quartz可参考https://www.cnblogs.com/wangjiming/p/10027439.html

    大致:先获取一个任务调度IScheduler ---->创建一个工作IJobDetail--->设置触发器ITrigger最后注入调度器IScheduler.ScheduleJob

   具体:

 public class SynChronize_JL
    {
        public static async void SynChronizeStart()
        {
            //获取调度器
            IScheduler scheduler =await  StdSchedulerFactory.GetDefaultScheduler();
            
            //创建job  WithIdentity(任务名称,任务分组)
            IJobDetail job = JobBuilder.Create<SynChronize_JLModel>().WithIdentity("JLjob", "JLgroup").Build();

            //创建触发器
            ITrigger trigger = TriggerBuilder.Create()
                              .WithIdentity("JLjob", "JLgroup")
                              .WithSimpleSchedule(x => x
                              .WithIntervalInMinutes(30)  //半个小时执行一次
                              .RepeatForever()).Build();//不间断重复执行
            //注入到计划调度
           await scheduler.ScheduleJob(job, trigger);
           await scheduler.Start();

        }

}

4  工作中的SynChronize_JLModel类必须时间IJob接口下的Execute方法

C#mvc使用Quartz定时调用某程序

 

5  在多说一下关于触发器上面用的是简单触发WithSimpleSchedule就是可以重复执行的,还可以使用复杂触发WithCronSchedule

改成复杂触发方式

ITrigger trigger = TriggerBuilder.Create()
                              .WithIdentity("JLjob", "JLgroup")
                              .WithCronSchedule("0 0 3 * * ?").Build();//每天凌晨3点执行

   具体可根据官方下图,编写适合自己的定时时间

C#mvc使用Quartz定时调用某程序