Quartz.net выбрасывает JobPersistenceException при удалении работы - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть основное веб-приложение 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 он отлично работает и сохраняет задания в базе данных.

1 Ответ

0 голосов
/ 28 сентября 2019

Невозможно удалить задание из планировщика, пока оно не запланировано или не добавлено.

Изменить код:

// Adding the job and the trigger.
scheduler.ScheduleJob(repostOrdersJob, repostOrdersTrigger).Wait();
// Deleting the job
scheduler.DeleteJob(repostOrdersJob.Key).Wait();
...