Quartz实现定时调用接口(.net core2.0)

1.nuget安装Quartz.AspNetCore

2.startup的ConfigureServices方法中增加注入

复制代码
services.AddQuartz(q =>
            {
                q.UseMicrosoftDependencyInjectionJobFactory();
                //是否开启定时补传打卡记录
                if (Common.Const.IsOpenPostRecordInfosSyn=="1")
                {
                    var jobKey = new JobKey("PostRecordInfosJob");
                    q.AddJob<App_Code.QuartzJob.PostRecordInfosJob>(opts => opts.WithIdentity(jobKey));

                    q.AddTrigger(opts => opts
                        .ForJob(jobKey)
                        .WithIdentity("PostRecordInfosJob-trigger")
                        //每分钟
                        .WithCronSchedule("0 * * * * ?")
                    );
                }
                //是否开启定时同步部门、员工信息
                if (Common.Const.IsOpenBaseInfoSyn == "1")
                {
                    var jobKey = new JobKey("BaseInfoSynJob");
                    q.AddJob<App_Code.QuartzJob.BaseInfoSynJob>(opts => opts.WithIdentity(jobKey));

                    q.AddTrigger(opts => opts
                        .ForJob(jobKey)
                        .WithIdentity("BaseInfoSyn-trigger")
                        //每小时
                        .WithCronSchedule("0 0 * * * ?")
                    );
                }
                //是否开启定时同步设备状态
                if (Common.Const.IsOpenDeviceStateSyn == "1")
                {
                    var jobKey = new JobKey("DeviceStateSynJob");
                    q.AddJob<App_Code.QuartzJob.DeviceStateSynJob>(opts => opts.WithIdentity(jobKey));

                    q.AddTrigger(opts => opts
                        .ForJob(jobKey)
                        .WithIdentity("DeviceStateSynJob-trigger")
                        //每分钟
                        .WithCronSchedule("0 * * * * ?")
                    );
                }
            });

            // ASP.NET Core hosting
            services.AddQuartzServer(options =>
            {
                // when shutting down we want jobs to complete gracefully
                options.WaitForJobsToComplete = true;                
            });

3.实现job接口

复制代码
 [DisallowConcurrentExecution]
    public class PostRecordInfosJob : IJob
    {
        private readonly IConfiguration _config;
        private readonly IHttpClientFactory _factory;
        private readonly IFreeSql _freeSql; 
        public PostRecordInfosJob(IConfiguration config,
            IHttpClientFactory factory, IFreeSql freeSql)
        {
            _config = config;
            _factory = factory;
            _freeSql = freeSql;
        }
        /// <summary>
        /// 补传打卡记录(补传记录每天12点进行一次)
        /// </summary>
        //对于耗时任务,需要上一次执行完成后,才执行下次任务,覆盖之前设置的执行周期 
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                postRecordInfos();
            }
            catch (Exception ex)
            {
                Common.LogHelper.Error(Common.LogHelper.GetMethodInfo(), ex.ToString(), XHEnum.LogType.异常Error, ex);
            }
        }
    }

部署到服务器是需要注意引入这四个dll

System.Configuration.ConfigurationManager.dll

相关推荐
公子小六3 天前
ASP.NET Core WebApi+React UI开发入门详解
react.js·ui·c#·asp.net·.netcore
工藤新一OL3 天前
.netCore的winform程序如何调用webapi
c#·.net·.netcore·visual studio
江沉晚呤时4 天前
深入解析 C# 开闭原则(OCP):设计可扩展的系统
数据库·c#·系统安全·.netcore
江沉晚呤时6 天前
深入解析外观模式(Facade Pattern)及其应用 C#
java·数据库·windows·后端·microsoft·c#·.netcore
江沉晚呤时6 天前
深入解析代理模式(Proxy Pattern):设计与应用
安全·c#·系统安全·.netcore
小吴同学·8 天前
NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL
中间件·c#·.net·.netcore·.net core
江沉晚呤时8 天前
深入解析组合模式(Composite Pattern):概念、结构与应用
java·开发语言·后端·c#·.netcore
江沉晚呤时9 天前
精益架构设计:深入理解与实践 C# 中的单一职责原则
java·jvm·算法·log4j·.netcore·net
世界太过浮夸10 天前
.net core集成MQTT服务端
.netcore
weixin_4219947810 天前
用 .net Core 实现简单的缓存,在小型单体项目中替代Redis
缓存·.netcore