2010-09-29 9 views
5

Estoy usando Quartz.NET con una base de datos, es decir, ADO.NET. El problema es que cuando se crean mis trabajos, no se guardan en la base de datos. ¿He configurado todo bien? Estoy usando SQL Server Express, y la ruta a mi base de datos es 'chris \ sqlexpress.Quartz.dbo'.ADO.NET con Quartz.NET

partes relevantes del archivo de configuración:

quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz 
quartz.jobStore.dataSource = default 
quartz.jobStore.tablePrefix = QRTZ_ 
quartz.jobStore.clustered = true 
quartz.jobStore.lockHandler.type = Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz 
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz 
quartz.dataSource.default.connectionString = 
Server=localhost;Database=Quartz;Trusted_Connection=True;"; 
quartz.dataSource.default.provider = SqlServer-20 
quartz.jobStore.useProperties = true 

initilisation Scheduler y adición de empleo:

ISchedulerFactory schedService = new StdSchedulerFactory(); 
IScheduler sched = schedService.GetScheduler(); 

JobDetail jobDetail = new JobDetail("1", "1", typeof(copyJob)); 
jobDetail.JobDataMap["initialPath"] = initpath; 
jobDetail.JobDataMap["targetPath"] = targetpath; 
jobDetail.JobDataMap["regex"] = regex; 

CronTrigger trigger = new CronTrigger("trigger1", "group1", "1", "1", TextBox4.Text); 
sched.AddJob(jobDetail, true); 
DateTime ft = sched.ScheduleJob(trigger); 
ft = TimeZoneInfo.ConvertTimeFromUtc(ft, trigger.TimeZone); 

Response.Write(string.Format("{0} has been scheduled to run at: {1} and repeat based on expression: {2}", jobDetail.FullName, ft.ToString("r"), trigger.CronExpressionString)); 

Respuesta

5

derecha, todo salió bien para cualquier persona que necesita ayuda. Mi cadena de conexión estaba equivocada, y tuve que codificar la información del servidor como en el Ejemplo 13 en los ejemplos de Quartz.NET. Es un gran marco :)

4

Tuve problemas similares con esto y la sección web.config aparentemente se ignoraba a menos que codificara las propiedades por algún motivo. No me gustaba esto, así que al final escribí un código para cargar las propiedades del archivo web.config y configurarlas en mi clase StdSchedulerProvider.

//force the properties to be loaded from the web.config section 
      NameValueCollection quartzSection = (NameValueCollection)ConfigurationManager.GetSection("quartz"); 
      if (quartzSection != null) 
      { 
       var quartzProperties = quartzSection.AllKeys.SelectMany(quartzSection.GetValues, (k, v) => new { key = k, value = v }); 

       foreach (var property in quartzProperties) 
       { 
        properties.Add(property.key, property.value); 
       } 
      } 

Mi sección de web.config es así:

<configSections> 
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" /> 
    </configSections> 

    <quartz> 
     <add key="quartz.scheduler.instanceName" value="SchedulingPOC"/> 
     <add key="quartz.scheduler.instanceId" value="SchedulingPOC"/> 

     <!-- 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=.\SQLExpress;Database=QuartzPOC;Trusted_Connection=True;"/> 

     <add key="quartz.dataSource.default.provider" value="SqlServer-20" /> 
     </quartz> 

Quartz.net continuación, empieza a registrar en la base de datos como yo quería. No tengo idea de por qué es tan difícil hacer que esto funcione.

+0

- Quartz busca la sección '' y carga propiedades desde allí, por lo que no está seguro de por qué tiene el código para repetir esto? Una versión más antigua tal vez? –