2010-09-29 11 views
5

Ich verwende Quartz.NET mit einer Datenbank, d. H. ADO.NET. Problem ist, wenn meine Jobs erstellt werden, werden sie überhaupt nicht in der Datenbank gespeichert. Habe ich alles richtig konfiguriert? Ich verwende SQL Server Express, und der Pfad zu meiner Datenbank lautet 'chris \ sqlexpress.Quartz.dbo'.ADO.NET mit Quartz.NET

Relevante Teile der Konfigurationsdatei:

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 

Scheduler initilisation und Job zusätzlich:

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

Antwort

5

Rechts, arbeitete sie für jedermann aus, der Hilfe braucht. Meine Verbindungszeichenfolge war falsch, und ich musste die Serverinformationen wie in Beispiel 13 in den Quartz.NET-Beispielen fest codieren. Es ist ein toller Rahmen :)

4

Ich hatte ähnliche Probleme mit diesem und der web.config Abschnitt scheinbar ignoriert wird, es sei denn, ich habe die Eigenschaften aus irgendeinem Grund hart codiert. Ich mochte das nicht, also schrieb ich am Ende Code, um die Eigenschaften aus der Datei web.config zu laden und sie stattdessen in meine Klasse StdSchedulerProvider zu setzen.

//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); 
       } 
      } 

Meine web.config Abschnitt ist wie folgt:

<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 dann in der Datenbank gestartet Protokollierung, wie ich es wollte. Keine Ahnung, warum es so schwer ist, das zum Laufen zu bringen.

+0

- Quarz sucht nach '' Abschnitt und lädt Eigenschaften von dort so unsicher, warum haben Sie Code, um dies zu wiederholen? Eine ältere Version vielleicht? –