如何在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...