我在我的应用程序中使用 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
您不应该直接使用 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);
注意 - 您可以根据需要更新触发器的其他属性,但我省略了这些属性以保持代码片段简短。