У меня есть основное веб-приложение asp.net, и я использую quartz.net для планирования некоторых фоновых заданий, и я реализовал QuartzStartup следующим образом:
public class QuartzStartup
{
private IScheduler scheduler;
// starts the scheduler, defines the jobs and the triggers
public void Start(IConfiguration configuration)
{
if (scheduler != null)
{
throw new InvalidOperationException("Already started.");
}
var properties = new NameValueCollection
{
["quartz.serializer.type"] = "json",
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.useProperties"] = "false",
["quartz.jobStore.dataSource"] = "MySqlServerFullVersion",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz",
["quartz.dataSource.MySqlServerFullVersion.provider"] = "SqlServer",
["quartz.dataSource.MySqlServerFullVersion.connectionString"] = configuration.GetConnectionString("MyConnectionStr")
};
var schedulerFactory = new StdSchedulerFactory(properties);
scheduler = schedulerFactory.GetScheduler().Result;
scheduler.Start().Wait();
var repostOrdersJob = JobBuilder.Create<RePostOrdersJob>()
.WithIdentity("RePostOrders")
.StoreDurably()
.Build();
var repostOrdersTrigger = TriggerBuilder.Create()
.WithIdentity("repostOrdersTrigger")
.StartNow()
.WithSimpleSchedule(x => x
.WithInterval(TimeSpan.FromMinutes(5))
.RepeatForever()
).Build();
//scheduler.UnscheduleJob(repostOrdersTrigger.Key).Wait();
scheduler.DeleteJob(repostOrdersJob.Key).Wait();
scheduler.ScheduleJob(repostOrdersJob, repostOrdersTrigger).Wait();
}
public void Stop()
{
if (scheduler == null)
{
return;
}
// give running jobs 30 sec (for example) to stop gracefully
if (scheduler.Shutdown(waitForJobsToComplete: true).Wait(30000))
{
scheduler = null;
}
else
{
this.Log().Warn("jobs didn't exit in timely fashion");
}
}
}
Но когда он достигает DeleteJob выдает следующее исключение:
JobPersistenceException: не удалось удалить триггер: строка не была распознана как допустимое логическое значение.
Мне интересно, что не так с моим кодомтак что я могу удалить задания при запуске приложения и снова добавить их.
ScheduleJob он отлично работает и сохраняет задания в базе данных.