开发平台:前端
VS2019web
背景:数据库
在开发小程序的API服务的时候,因为access_token的有效期为7200秒,也就是2小时,这就须要后端定时的去更新这个access_token,便于调用小程序的一些接口。小程序
设计思路与实现步骤:后端
1.准备把access_token存在数据库中,如前端须要调小程序接口,经过个人后端去调小程序公开的接口。api
2.个人webapi部署在IIS上,因此在Global.asax启动站点的时候,在Application_Start方法下添加个人定时任务。以下图async
3.RunScheduler方法内Quartz.Net来建立任务调度器、建立做业和触发器等。ide
在VS中用NuGet管理器下载Quartz.Net并添加到指定的项目中去,以下图,我这里用的是VS2019测试
AccessTokenJobSchedule.RunScheduler()代码以下:ui
1 public class AccessTokenJobSchedule 2 { 3 public static async Task RunScheduler() 4 { 5 // 建立做业调度器 6 ISchedulerFactory factory = new StdSchedulerFactory(); 7 IScheduler scheduler = await factory.GetScheduler(); 8 9 // 启动调度器 10 await scheduler.Start(); 11 12 // 建立做业 13 IJobDetail job = JobBuilder.Create<UpdateAccessTokenJob>() 14 .WithIdentity("job1", "group1") 15 .Build(); 16 17 // 建立触发器,每10min执行一次 18 ITrigger trigger = TriggerBuilder.Create() 19 .WithIdentity("trigger1", "group1") 20 .StartNow() 21 .WithSimpleSchedule(x => x 22 .WithIntervalInMinutes(10) 23 .RepeatForever()) 24 .Build(); 25 26 // 加入到做业调度器中 27 await scheduler.ScheduleJob(job, trigger); 28 }
上述代码中建立做业job中,UpdateAccessTokenJob类须要继承Quzrtz中的接口IJob,实现接口IJob中的方法Execute,在Execute方法中能够编写具体的方法,即须要定时去执行的操做。
IJobDetail job = JobBuilder.Create<UpdateAccessTokenJob>().WithIdentity("job1", "group1").Build();
UpdateAccessTokenJob类代码以下
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Threading.Tasks; 5 using System.Web; 6 using Quartz; 7 using Quartz.Impl; 8 using System.Configuration; 9 10 namespace WebAPI.ExtendFuncs 11 { 12 public class UpdateAccessTokenJob : IJob 13 { 14 public async Task Execute(IJobExecutionContext context) 15 { 16 //本身实现要定时执行的操做方法 17 18 } 19 20 } 21 }
------------------------------------------------------------------------------------------------------------以上代码基本实现
测试
在IIS中启动个人Global.asax,触发个人定时服务
查看数据库日志,我设定的是每10分钟执行个人操做
事实没那么简单
这是什么缘由呢,原来是IIS这个东东自动回收了个人进程,以为我这个进程不是活跃的。
解决办法是配置你使用到的程序池配置,在程序池的高级设置中:
启动模式:AlwaysRunning
固定时间间隔(分钟):0
闲置超时(分钟):0
如今去重启个人页面测试,就OK了