2011-06-28 18 views
8

Estoy creando un planificador usando Quartz.NET en el proyecto actual. En mi caso, todos los trabajos que deben crearse se almacenan en una sola tabla y hay una IU separada donde puedo agregar nuevos trabajos o editar trabajos existentes. Mi pregunta es ¿cómo puedo alimentar todos los trabajos en la tabla al programador de Quartz? ¿Deseo consultar todos los trabajos de la tabla y recorrerlos creando los objetos JobDetails y Trigger? ¿Hay alguna manera mejor en este caso?Quartz.Net Job Storage Query

En este caso, ¿quiero usar una RAMJobStore o AdoJobStore?

Respuesta

17

puede usar AdoJobStore.
Quartz.net utilizará un conjunto de tablas con el prefijo QRTZ_ (puede cambiarlo si lo desea) en su base de datos para trabajos almacenados, disparadores y el estado de estos objetos.
Supongo que quiere tener una tabla en su base de datos donde va a mantener la información extendida sobre sus horarios, ¿verdad?
No accederá directamente a la tabla de Quartz.net porque utilizará las API provistas por Quartz.net.

El proceso para crear un detalle de trabajo y desencadenar es sencillo y se describe muy bien en el tutorials.

Para configurar su aplicación para usar el AdoJobStore, debe especificar algunas informaciones en su archivo app.config. Aquí se muestra un ejemplo:

<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> 

Hay algunas cosas a tener en cuenta en función de si se está hospedando Quartz.net en una aplicación web o una aplicación de servicio o WinForm. El mejor enfoque es crear SchedulerFactory y Scheduler como singleton. Puede obtener más información here.

ACTUALIZACIÓN:

En primer lugar hay que crear tablas Quartz.net (ver Step 1) y luego usted tendrá que crear unos índices de optiomization (véase la parte inferior de la page).

Dado que va a enviar sus trabajos usando la aplicación web pero no está usando esa aplicación para los eventos de quartz.net (desencadenantes), no es necesario que inicie el programador. Hay algunos pasos a seguir en este lado:

usted tiene que cambiar el tipo de grupo de subprocesos a ZeroSizeThreadPool

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

y usted tiene que definir su StdSchedulerFactory y Singleton Programador. Puede comenzar durante la aplicación (asp.net) bootstrap.

Nunca vas a iniciar el Programador (tu servicio de Windows va a usar eso).

Otra cosa para recordar es que va a necesitar compartir su job entre su web y su servicio de Windows, por lo que sería mejor mantenerlo en un ensamblaje por separado.

Mencionaste que estás almacenando algunas informaciones en una de tus mesas. Aún necesita tener que enviar sus trabajos y desencadenar lo cual se mantendrá en las tablas de Quartz.net.

+0

Gracias por su respuesta.Tengo una sola tabla en la base de datos que almacena toda la información de trabajos para la empresa. El programador se ejecuta en el servicio de Windows y, a través de una aplicación ASP.NET, los trabajos se agregan a esta tabla o se editan. Entonces, ¿cómo puedo usar Quartz.NET en este caso? Cada vez que se agrega o edita un trabajo, el planificador debe actualizarse. – Dnana

+0

@Dnana: ¿es ese su servicio de Windows o servicio de Windows de Quartz.net? – LeftyX

+0

.net servicio de windows. No estoy seguro de cuál es mejor en este caso. – Dnana