您可以使用 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 服务将使用它)。
要记住的另一件事是,您需要在 Web 和 Windows 服务之间共享您的 job,因此最好将其保存在单独的程序集中。
您提到您将一些信息存储在您的一张表中。
您仍然需要提交您的作业和触发器,它们将保留在 Quartz.net 表中。