NetCore 使用Quartz定时执行任务
1.Nuget
install-package Quartz.Extensions.Hosting
2.添加文件:WhileJob
/// <summary> /// while quartz job /// </summary> [DisallowConcurrentExecution] public class WhileJob : IJob { #region 依赖注入 /// <summary> /// 日志注入 /// </summary> private readonly ILogger _logger; #endregion #region 构造函数注入 /// <summary> /// 构造函数注入 /// </summary> /// <param name="logger"></param> /// <param name="configuration"></param> public WhileJob(ILogger<WhileJob> logger) { _logger = logger; } #endregion /// <summary> /// /// </summary> /// <param name="context"></param> /// <returns></returns> public Task Execute(IJobExecutionContext context) { _logger.LogInformation("Hello World!"); return Task.CompletedTask; } }
3.添加文件:QuartzExtend
/// <summary> /// QuartZ.net 扩展类 /// </summary> public static class QuartzExtend { /// <summary> /// 自定义扩展方法: 把Quartz添加到服务容器 /// </summary> /// <param name="services"></param> /// <param name="configuration"></param> public static void AddCustQuartz(this IServiceCollection services, IConfiguration configuration) { // Add the required Quartz.NET services services.AddQuartz(q => { // Use a Scoped container to create jobs. I'll touch on this later q.UseMicrosoftDependencyInjectionScopedJobFactory(); // 控制是否运行quartz if (configuration["CustData:WhileRouterCron"].Equals("true")) { q.AddCustJob<WhileJob>("0 * * * * ? *"); } }); // Add the Quartz.NET hosted service services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true); // other config } /// <summary> /// 封装Quartz添加job代码 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="q"></param> /// <param name="cron"></param> private static void AddCustJob<T>(this IServiceCollectionQuartzConfigurator q, string cron) where T : IJob { // Create a "key" for the job var keyName = typeof(T).Name; var jobKey = new JobKey(keyName); // Register the job with the DI container q.AddJob<T>(opts => opts.WithIdentity(jobKey)); // Create a trigger for the job q.AddTrigger(opts => opts.ForJob(jobKey) // link to the job .WithIdentity($"{keyName}-trigger") // give the trigger a unique name .WithCronSchedule(cron)); // 定时启动 } }
4.Startup.ConfigureServices
services.AddCustQuartz(_configuration);
5.防止IIS自动回收线程
5.1.IIS 防止自动回收5.2.添加一个间隔20分钟的job,模拟请求当前应用的接口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现