我在当前项目中使用Quartz.NET创建了一个调度器。就我而言,所有必须创建的作业都存储在一个表中,并且有一个单独的用户界面,可以添加新作业或编辑现有作业。我的问题是我如何能够将表中的所有工作提交给Quartz调度器?我是否想要查询表中的所有作业并遍历它,创建JobDetails和Trigger对象?在这种情况下有没有更好的方法?Quartz.Net作业存储查询
在这种情况下我想用RAMJobStore或AdoJobStore?
我在当前项目中使用Quartz.NET创建了一个调度器。就我而言,所有必须创建的作业都存储在一个表中,并且有一个单独的用户界面,可以添加新作业或编辑现有作业。我的问题是我如何能够将表中的所有工作提交给Quartz调度器?我是否想要查询表中的所有作业并遍历它,创建JobDetails和Trigger对象?在这种情况下有没有更好的方法?Quartz.Net作业存储查询
在这种情况下我想用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。
UPDATE:
所有你必须创建Quartz.net表的第一(见Step 1),然后你就必须为optiomization创建几个指标(见page的底部)。
既然你要使用Web应用程序来提交您的工作,但你没有使用该应用为你不需要启动调度的quartz.net事件(触发)。 有几个步骤,遵循这一边:
你有线程池类型更改为ZeroSizeThreadPool
<add key="quartz.threadPool.type"
value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" />
,你必须确定你的StdSchedulerFactory和调度单。您可以在应用程序(asp.net)引导期间启动。
你永远不会启动调度程序(你的Windows服务将使用)。
要记住的另一件事是你需要在你的web和你的windows服务之间共享你的job,所以最好把它保存在一个单独的程序集中。
你提到过你在一张表中存储了一些信息。 你仍然需要提交你的工作,并触发哪些将保存在Quartz.net表中。
感谢您的回复。我在数据库中有一张表,用于存储业务的所有工作信息。调度程序在Windows服务中运行,并通过ASP.NET应用程序将作业添加到此表中或进行编辑。那么我如何在这种情况下使用Quartz.NET?无论何时添加或编辑作业,都必须更新调度程序。 – Dnana
@Dnana:是你的windows服务还是Quartz.net的windows服务? – LeftyX
.net windows服务。在这种情况下,我不确定哪一个更好。 – Dnana