如何直接从 DotNet Quartz 中的数据库更新 Quartz 作业触发 cron 时间

问题描述 投票:0回答:1

我在我的应用程序中使用 dot netquartz 3.1 调度程序。一切都很顺利。

我已经用它的触发器创建了新的石英作业,并且工作正常。但是,我需要直接从数据库更改作业的触发时间。

因此,我尝试从 QRTZ_CRON_TRIGGERS 表更新 cron 值(Cron_Expression 列)。直接更新新的 cron 值后,我的工作没有被触发。

任何人都可以帮我将 cron 触发时间直接更新到 My DB 中的 Quartz 调度程序相关表中吗?

请找到我尝试过的查询,

update [dbo].[QRTZ_CRON_TRIGGERS] set cron_expression = '0 5 6,7,8 * * ?' where trigger_name ='xxxxxxxxxx-xxxxxxxxxxx'

注意:我知道,我们可以直接创建新作业和触发器,而不是直接从数据库更新 cron 值。但我的要求是需要单独更新现有作业的触发时间。

数据库服务器:SqlServer

.net-core cron quartz-scheduler quartz.net job-scheduling
1个回答
0
投票

您不应该直接使用 SQL 更新 Quartz 表。使用 Quartz API 更新计划,但如果不创建新触发器(但不是新作业)则无法执行此操作。

这是我们的 C# 代码:

    var triggerKey = new TriggerKey(triggerName, triggerGroup);
    var trigger = await _scheduler.GetTrigger(triggerKey);
    
    var builder = trigger.GetTriggerBuilder();
    var newTrigger = (CronTriggerImpl)builder.Build();
    newTrigger.CronExpressionString = "0 5 6,7,8 * * ?";
    await _scheduler.RescheduleJob(trigger.Key, newTrigger);

注意 - 您可以根据需要更新触发器的其他属性,但我省略了这些属性以保持代码片段简短。

© www.soinside.com 2019 - 2024. All rights reserved.