请注意,为了便于阅读,我修改了表/字段名称等。有些原来的名字很混乱。
\n\n我有三个不同的表:
\n\nRetailer (Id+Code is a unique key)\n- Id\n- Code\n- LastReturnDate\n- ...\n\nDelivery/DeliveryHistory (combination of Date+RetailerId is unique)\n- Date\n- RetailerId\n- HasReturns\n- ...\nRun Code Online (Sandbox Code Playgroud)\n\nDelivery并且DeliveryHistory几乎完全相同。数据会定期移动到历史表中,并且没有可靠的方法可以知道最后一次发生这种情况的时间。一般来说,Delivery 表非常小——通常少于 100,000 行——而历史表通常有数百万行。
LastReturnDate我的任务是根据HasReturnsDelivery或DeliveryHistory 中当前最高日期值更新每个零售商的字段。
以前这个问题已经通过定义如下的视图来解决:
\n\nRetailer (Id+Code is a unique key)\n- Id\n- Code\n- LastReturnDate\n- ...\n\nDelivery/DeliveryHistory (combination of Date+RetailerId is unique)\n- Date\n- RetailerId\n- HasReturns\n- ...\nRun Code Online (Sandbox Code Playgroud)\n\n以及以下 UPDATE 语句:
\n\nSELECT Id, Code, MAX(Date) Date\n FROM Delivery\n WHERE HasReturns = 1\n GROUP BY Id, …Run Code Online (Sandbox Code Playgroud) 我需要检索 Quartz.NET 数据库中所有触发器的列表,以便我可以在表中列出有关它们的信息。我想要所有触发器,无论它们是在运行、等待、获取还是其他。我只使用一个调度程序名称和一个组,所以在我的情况下,这基本上是一个简单的事情SELECT * FROM QRTZ_TRIGGERS(不完全正确,因为我还需要QRTZ_CRON_TRIGGERS表中的信息),但我宁愿通过 API。
目前,我正在浏览所有已知的工作类型并GetTriggersOfJob为每一种工作类型打电话,正如我在互联网上的几个地方看到的那样。我的实际代码比这更复杂,但这是它的要点:
var allJobKeys = *a list of all known jobs*
var scheduler = *a new scheduler object*
var allTriggers = allJobKeys
.Select(scheduler.GetTriggersOfJob)
.ToList();
Run Code Online (Sandbox Code Playgroud)
这真的是唯一的方法吗?实在是太没效率了!我有大约 30 种不同的工作类型(并且还在增加),其中大多数可能在任何给定时间都具有与它们相关的零触发器。但这将每次需要 30 个数据库查询,而不是检索所有这些查询的单个查询。
请注意,我正在检索触发器的调度程序仅用于该目的以及用于创建/更新/删除触发器,并且永远不会用于执行作业。我确保从不调用scheduler.Start()它。
据我所知getAllTriggers(),Java 中的原始 Quartz API 中也没有,所以我假设这不存在是有原因的,即使这看起来很简单。当有多个调度程序主机以集群模式或类似方式运行时,它是否与并发处理有关?这似乎是人们经常想做的事情。