我需要检索Quartz.NET数据库中所有触发器的列表,以便我可以在表中列出有关它们的信息。我希望所有的触发器,无论他们是否在运行,等待,获得或其他。我只使用一个调度程序名称和一个组,所以在我的情况下,这基本上是一个简单的事情做SELECT * FROM QRTZ_TRIGGERS
(不完全正确,因为我也需要从QRTZ_CRON_TRIGGERS
表中获得信息),但我宁愿通过API。获取Quartz.NET中的所有触发器
目前我正在浏览所有已知的工作类型,并为每个工作类型打电话GetTriggersOfJob
,正如我在互联网上的几个地方推荐的那样。我真正的代码比这更复杂,但是这是它的要点:
var allJobKeys = *a list of all known jobs*
var scheduler = *a new scheduler object*
var allTriggers = allJobKeys
.Select(scheduler.GetTriggersOfJob)
.ToList();
这真的是这样做的唯一途径?这真的很无效!我有大约30种不同的工作类型(和计数),其中大多数在任何给定时间可能都没有与他们关联的触发器。但是这将需要每次30个数据库查询,而不是一个检索所有这些查询的单个查询。
请注意,我正在检索触发器的调度器仅用于此目的以及用于创建/更新/删除触发器,并且永远不会用于执行作业。我保证永远不要致电scheduler.Start()
就可以了。
从我可以告诉的是,在Java的原始Quartz API中也没有getAllTriggers()
,所以我假设这是不存在的原因,即使它看起来像这样一个不费吹灰之力。当有多个调度程序主机运行在集群模式或类似的情况下,它是否可以处理并发处理?这似乎是人们想要经常做的事情。
是不是这个答案可在http://stackoverflow.com/questions/12489450/get-all-jobs-in-quartz-net-2-0 – labilbe
@labilbe在那里接受的答案使用相同的技术,我'正在使用'GetTriggersOfJob'。 –
这是使用对象模型的一个小缺点...使用现有的API .....“集合操作”有时是事后的想法。你被困在“循环”........你可以〜贡献开源项目......在你编写代码后做你想做的事情。 – granadaCoder