gpt4 book ai didi

Quartz.Net 作业存储查询

转载 作者:行者123 更新时间:2023-12-02 11:29:58 25 4
gpt4 key购买 nike

我正在当前项目中使用 Quartz.NET 创建调度程序。就我而言,所有需要创建的作业都存储在一个表中,并且有一个单独的 UI,我可以在其中添加新作业或编辑现有作业。我的问题是如何将表中的所有作业提供给 Quartz 调度程序?我是否想要查询表中的所有作业并迭代它以创建 JobDetails 和 Trigger 对象?这种情况下还有什么更好的办法吗?

在这种情况下,我想使用 RAMJobStore 还是 AdoJobStore?

最佳答案

您可以使用AdoJobStore。
Quartz.net 将在数据库中使用一组带有前缀 QRTZ_(您可以根据需要更改它)的表来存储这些对象的作业、触发器和状态。
我想您希望在数据库中有一个表来保存有关您的日程安排的扩展信息,对吗?
您不会直接访问 Quartz.net 表,因为您将使用 Quartz.net 提供的 API。

创建作业详细信息和触发器的过程非常简单,并且在 tutorials 中进行了很好的描述。 .

配置您的应用程序以使用AdoJobStore您必须在 app.config 文件中指定一些信息。这是一个例子:

  <quartz>
<add key="quartz.scheduler.instanceName" value="myApp" />
<add key="quartz.scheduler.instanceId" value="MyApp" />
<!-- Configure Thread Pool -->
<add key="quartz.threadPool.type"
value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.threadPool.threadPriority" value="Normal" />
<!-- Configure Job Store -->
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.jobStore.type"
value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.useProperties" value="true" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.lockHandler.type"
value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.dataSource.default.connectionString"
value="Server=SVSQL2008;Database=QuartzNet1;Trusted_Connection=True;" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />
</quartz>

有几件事需要记住,具体取决于您是否在 Web 应用程序、服务或 winform 应用程序中托管 Quartz.net。最好的方法是将 SchedulerFactory 和 Scheduler 创建为单例。您可以收集更多信息 here .

更新:

首先,您必须创建 Quartz.net 表(请参阅 Step 1 ),然后您必须创建一些索引以进行优化(请参阅 page 的底部)。

由于您将使用网络应用程序提交作业,但您不使用该应用程序来处理quartz.net 事件(触发器),因此您无需启动调度程序。这方面需要遵循几个步骤:

您必须将线程池类型更改为ZeroSizeThreadPool

<add key="quartz.threadPool.type" 
value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" />

并且您必须定义 StdSchedulerFactory 和 Scheduler 单例。您可以在应用程序 (asp.net) 引导期间启动。

您永远不会启动调度程序(您的 Windows 服务将使用它)。

要记住的另一件事是您需要分享您的 job在您的 Web 和 Windows 服务之间,因此最好将其保留在单独的程序集中。

您提到您正在一张表中存储一些信息。您仍然需要提交作业和触发器,它们将保留在 Quartz.net 表中。

关于Quartz.Net 作业存储查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com