Quartz.Net作业存储查询

Dna*_*ana 8 quartz.net

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

在这种情况下,我想使用RAMJobStore或AdoJobStore吗?

Lef*_*tyX 17

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

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

要将您的应用配置为使用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>
Run Code Online (Sandbox Code Playgroud)

如果您在Web应用程序或服务或winform应用程序中托管Quartz.net,则需要记住几件事.最好的方法是将SchedulerFactory和Scheduler创建为单例.你可以在这里收集更多的信息.

更新:

首先,您必须创建Quartz.net表(请参阅步骤1),然后您必须为optiomization创建一些索引(请参阅页面底部).

由于您要使用Web应用程序提交作业,但是您没有将该应用程序用于quartz.net事件(触发器),因此您无需启动调度程序.这一步有几个步骤:

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

<add key="quartz.threadPool.type" 
                   value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" />
Run Code Online (Sandbox Code Playgroud)

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

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

另一件需要记住的事情是,您需要在Web和Windows服务之间共享工作,因此最好将其保存在单独的程序集中.

你提到你在一张桌子里存放了一些信息.您仍然需要提交您的作业和触发器,这些作业将保留在Quartz.net表中.