如何解决如何在 Net 5.0 C# 中使用 Quartz 从作业更新数据库?
我有下一个情况,我需要每天在确定的时间使用 EF Core 更新数据库中的一行。我决定使用 Quartz.Net 并且设置如下:
在 Startup.cs 文件中:
private async Task<IScheduler> GetScheduler()
{
try
{
var properties = new NameValueCollection
{
["quartz.scheduler.instanceName"] = Configuration["quartz:instanceName"],["quartz.threadPool.type"] = Configuration["quartz:threadType"],["quartz.threadPool.threadCount"] = Configuration["quartz:threadCount"],["quartz.jobStore.type"] = Configuration["quartz:jobType"]
};
var schedulerFactory = new StdSchedulerFactory(properties);
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();
return scheduler;
}
catch (Exception)
{
return null;
}
}
并在 ConfigureServices 上实例化为单例:services.AddSingleton(x => GetScheduler().Result);
之后,我创建了一个包含工作的类:
public class JobsTasks : IJob
{
public Task Execute(IJobExecutionContext jobContext)
{
try
{
if (jobContext.JobDetail.Key.ToString() == "BatchsSerials.RestartAllBatchsAndSerials")
{
Debug.WriteLine($"Executed at: {DateTime.Now},with context: {jobContext.JobDetail.Key}");
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
return Task.Fromresult(1);
}
}
我从 GET 端点(用于测试)调用此作业,如下所示:
await _scheduler.DeleteJob(JobKey.Create("BatchsSerials.RestartAllBatchsAndSerials"));
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity($"RestartAllBatchsAndSerials",$"BatchsSerials")
.WithCronSchedule("*/5 * * ? * * *")
.WithPriority(1)
.StartNow()
.Build();
IJobDetail job = JobBuilder.Create<JobsTasks>()
.WithIdentity($"RestartAllBatchsAndSerials",$"BatchsSerials")
.Build();
await _scheduler.ScheduleJob(job,trigger);
return Ok(_response.AsJson("Execute succesfully",Customresponse.Priority.Info,HttpStatusCode.OK));
通过这些配置,我可以每 5 秒显示一次 Debug.WriteLine,但问题是......我如何通过依赖注入来识别 DbContext 以执行查询?。 感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。