是否可以从正在运行的Quartz.Net sheduler服务中添加或删除作业和触发器?
答案 0 :(得分:1)
所以我有一个连接到Sql Server的POC(概念证明)。
我有两个控制台应用程序:
QuartzPOC.ConsoleApp.PopulateJobs.exe
and
QuartzPOC.ConsoleApp.RunJobs.exe
我跑了
QuartzPOC.ConsoleApp.RunJobs.exe
使用空(QuartzDB)数据库。显然,在运行期间没有任何工作。
当“QuartzPOC.ConsoleApp.RunJobs.exe”正在运行时......我随后跑了
QuartzPOC.ConsoleApp.PopulateJobs.exe
仅将作业放入数据库。注意:我不会用“QuartzPOC.ConsoleApp.PopulateJobs.exe”调用“IScheduler.Start”
“QuartzPOC.ConsoleApp.PopulateJobs.exe”结束,因此不再运行。
我等了。 (请记住“QuartzPOC.ConsoleApp.RunJobs.exe”仍在运行)。乔布斯开始跑步。
神奇的“召唤”似乎是这样的:
exec sp_executesql N'SELECT TOP 1 TRIGGER_NAME, TRIGGER_GROUP, NEXT_FIRE_TIME, PRIORITY FROM QRTZ_TRIGGERS WHERE SCHED_NAME = ''MySchedulerName'' AND TRIGGER_STATE = @state AND NEXT_FIRE_TIME <= @noLaterThan AND (MISFIRE_INSTR = -1 OR (MISFIRE_INSTR <> -1 AND NEXT_FIRE_TIME >= @noEarlierThan)) ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC',N'@state nvarchar(7),@noLaterThan bigint,@noEarlierThan bigint',@state=N'WAITING',@noLaterThan=235333689932806505,@noEarlierThan=235333689282806505
因此,如果您填充作业(通过C#代码到Quartz.Net库)....作为另一个进程运行的调度程序将获取数据库更改。