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