【发布时间】:2017-12-18 12:26:04
【问题描述】:
我有一个在 ASP Core 2 下构建的项目,该项目利用 Quartz.NET 调度程序 3-beta1
我有以下想要执行的工作:
public class TestJob: IJob
{
private readonly AppDbContext _dbContext;
public TestJob(AppDbContext dbContext)
{
_dbContext = dbContext;
}
public Task Execute(IJobExecutionContext context)
{
Debug.WriteLine("Test check at " + DateTime.Now);
var testRun = _dbContext.TestTable.Where(o => o.CheckNumber > 10).ToList();
Debug.WriteLine(testRun.Count);
return Task.CompletedTask;
}
}
不幸的是,它永远无法正常工作,并且没有错误日志表明存在问题。
然而,当我删除所有内容并离开 Debug.WriteLine 时,它的工作原理如下例所示。
public class TestJob: IJob
{
public Task Execute(IJobExecutionContext context)
{
Debug.WriteLine("Test check at " + DateTime.Now);
return Task.CompletedTask;
}
}
我怎样才能让我的工作来执行数据库调用?
编辑 1:创造就业机会
var schedulerFactory = new StdSchedulerFactory(properties);
_scheduler = schedulerFactory.GetScheduler().Result;
_scheduler.Start().Wait();
var testJob = JobBuilder.Create<TestJob>()
.WithIdentity("TestJobIdentity")
.Build();
var testTrigger = TriggerBuilder.Create()
.WithIdentity("TestJobTrigger")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInMinutes(1).RepeatForever())
.Build();
if (CheckIfJobRegistered(testJob.Key).Result == false)
_scheduler.ScheduleJob(testJob, testTrigger).Wait();
【问题讨论】:
-
您是否使用任何工厂来创造就业机会?
-
是的,我现在将我的代码用于创造就业机会
-
JobBuilder不是工厂,它为作业创建定义。 Quartz 在执行前不久创建了该作业。但是 Quartz 不知道如何使用自定义构造函数来创建作业。您需要一个空的默认构造函数或自定义 JobFactory 来创建作业。 -
不确定我明白你的意思。作业已创建,只是在我注入 dbcontext 时不执行
-
但谁创造了这份工作?您在编辑中的 Job Creation 不会创建作业,它只是安排它。也许您的示例不完整,但我看不到您注入 dbcontext 或创建作业的任何内容。
标签: asp.net-core asp.net-core-2.0 quartz.net