Quartz.Net Запрос хранилища заданий - PullRequest
8 голосов
/ 28 июня 2011

Я создаю планировщик, используя Quartz.NET в текущем проекте. В моем случае все задания, которые должны быть созданы, хранятся в одной таблице, и есть отдельный пользовательский интерфейс, где я могу добавлять новые задания или редактировать существующие задания. У меня вопрос, как я могу передать все задания в таблице в планировщик Quartz? Хочу ли я запросить все задания в таблице и выполнить итерацию по ней, создав объекты JobDetails и Trigger? Есть ли лучший способ в этом случае?

В этом случае я хочу использовать RAMJobStore или AdoJobStore?

1 Ответ

17 голосов
/ 28 июня 2011

вы можете использовать AdoJobStore.
Quartz.net будет использовать набор таблиц с префиксом QRTZ_ (вы можете изменить его, если хотите) в вашей базе данных для сохраненных заданий, триггеров и состояния этих объектов.
Я думаю, вы хотите иметь таблицу в вашей БД, где вы будете хранить расширенную информацию о ваших расписаниях, верно?
Вы не будете обращаться к таблице Quartz.net напрямую, потому что будете использовать API, предоставляемые Quartz.net.

Процесс создания детализации задания и триггера прост и очень хорошо описан в руководствах .

Чтобы настроить ваше приложение на использование 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>

В зависимости от того, размещаете ли вы Quartz.net в веб-приложении, в сервисе или в приложении winform, нужно учитывать несколько вещей. Наилучшим подходом является создание SchedulerFactory и Scheduler как синглтона. Вы можете собрать больше информации здесь .

UPDATE

Прежде всего вам нужно создать таблицы Quartz.net (см. Шаг 1 ), а затем вам нужно будет создать несколько индексов для оптимизации (см. Нижнюю часть страницы ). ).

Поскольку вы собираетесь отправлять свои задания с помощью веб-приложения, но не используете это приложение для событий quartz.net (триггеров), вам не нужно запускать планировщик. Есть несколько шагов, чтобы следовать на этой стороне:

Вы должны изменить тип пула потоков на ZeroSizeThreadPool

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

и вам нужно определить синглтоны StdSchedulerFactory и Scheduler. Вы можете запустить во время загрузки приложения (asp.net).

Вы никогда не собираетесь запускать Планировщик (ваша служба Windows будет использовать это).

Еще одна вещь, которую нужно помнить, это то, что вам нужно будет разделить вашу работу между вашей сетью и службой Windows, так что было бы лучше хранить ее в отдельной сборке.

Вы упомянули, что храните информацию на одном из ваших столов. Вам все еще нужно отправить свои задания и активировать их, которые будут сохранены в таблицах Quartz.net.

...