问题描述
我有下一个情况,我需要每天在确定的时间使用 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 (将#修改为@)