微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Net 5.0 C# 中使用 Quartz 从作业更新数据库?

如何解决如何在 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 举报,一经查实,本站将立刻删除。