我正在当前项目中使用Quartz.NET创建调度程序。在我的情况下,所有必须创建的作业都存储在一个表中,并且有一个单独的UI,我可以在其中添加新作业或编辑现有作业。我的问题是如何将表中的所有作业提供给Quartz调度程序?我是否要查询表中的所有作业并迭代创建JobDetails和Trigger对象?在这种情况下有没有更好的方法?
在这种情况下,我想使用RAMJobStore还是AdoJobStore?
答案 0 :(得分:17)
你可以使用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),然后您必须为optiomization创建一些索引(请参阅page的底部)。
由于您要使用Web应用程序提交作业,但您没有将该应用程序用于quartz.net事件(触发器),因此您无需启动计划程序。 这一步有几个步骤可以遵循:
您必须将线程池类型更改为 ZeroSizeThreadPool
<add key="quartz.threadPool.type"
value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" />
你必须定义你的StdSchedulerFactory和Scheduler单例。您可以在应用程序(asp.net)bootstrap期间启动。
你永远不会启动调度程序(你的Windows服务将使用它)。
另一件需要记住的事情是,您需要在网络和Windows服务之间共享job,因此最好将其保存在单独的程序集中。
你提到你在一张桌子里存放了一些信息。 您仍然需要提交您的作业和触发器,这些作业将保留在Quartz.net表中。