我成功地设置了一个双节点调度程序集群来执行作业 . 我使用 OracleODP-20 连接器连接到oracle数据库,其中创建了 QRTZ_ 表 . 预定的作业也将由每5分钟一个调度程序执行 .
这是我的触发器:
ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
.WithIdentity("mytrigger", schedId)
.StartNow()
.WithSimpleSchedule(x => x.WithRepeatCount(-1).WithInterval(TimeSpan.FromMinutes(5)))
.Build();
但是有一个问题 . 当调度程序启动时,它总是执行作业,即使现在没有下次执行作业的时间 .
例如 . ,
-
Job1将每5分钟运行一次 .
-
Scheduler1从10.00开始执行Job1并等待10.05进行下一次执行 .
-
当我在10.01启动Scheduler2时,即使Job1应该在下一个10.05运行,它也会在10.01运行
在初始运行之后,Job1将仅由一个调度程序执行,并且正常运行 .
但我不知道如何告诉Scheduler2,该作业已由Scheduler1执行,并且直到下一个触发时才执行 .
对此有何帮助?
1 回答
您应该只创建一次此触发器,而不是每个节点的启动 .
我看到你触发包含实例的id作为非常可疑的组 . 如果您还没有创建单个触发器,那么您似乎在触发每个节点 .
因此,更容易阅读触发器定义:
我投入了平均时间来获得更精确的时间,而不是“从现在开始每5分钟” . 您也可以使用cron触发器轻松获得此功能 .