2010-09-08 5 views
1

J'ai commencé à utiliser Quartz.NET récemment, et jusqu'à présent, ça a vraiment été utile pour . Maintenant, j'essaie de l'utiliser pour créer un travail qui s'exécute une fois un mois en utilisant un NthIncludedDayTrigger (je veux utiliser le NthIncludedDayTrigger car finalement je vais spécifier un calendrier à exclure les week-ends/jours fériés).Aide et conseils nécessaires pour travailler avec Quartz.NET NthIncludedDayTrigger

Pour me familiariser avec le code, j'ai mis en place une application simple de la console pour créer un NthIncludedDayTrigger où la première fois de feu 15 secondes à partir de maintenant:

static void Main(string[] args) 
{ 
    IScheduler scheduler = StdSchedulerFactory.DefaultScheduler; 
    scheduler.Start(); 

    var jobDetail = new JobDetail("Job name", "Group name", typeof(SomeIJobImplementation)); 
    var trigger = new NthIncludedDayTrigger(); 
    trigger.Name = "Trigger name"; 
    trigger.MisfireInstruction = MisfireInstruction.NthIncludedDayTrigger.DoNothing; 
    trigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly; 

    //I'm using the following while experimenting with the code (AddHour(1) to account for BST): 
    trigger.FireAtTime = DateTime.UtcNow.AddHours(1).AddSeconds(15).ToString("HH:mm:ss"); 

    //I'm using the following while experimenting with the code: 
    trigger.N = DateTime.Today.Day; 

    Console.WriteLine("Started, press any key to stop ..."); 
    Console.ReadKey(); 

    scheduler.Shutdown(false); 
} 

... 

public class SomeIJobImplementation : IJob 
{ 
    public void Execute(JobExecutionContext context) 
    { 
      Logger.Write(String.Format(
       "Job executed called at {0}", 
       DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss")), null, 1, 
       TraceEventType.Information); 
    } 
} 

L'exécution de ce résultats dans le travail en cours d'exécution plusieurs fois (environ une fois par seconde) pendant une minute. J'utilise un magasin de travaux ADO.NET et peut voir dans ma base de données que QRTZ_TRIGGERS.NEXT_FIRE_TIME est défini sur la dernière heure exécutée, c'est-à-dire ne semble pas être planifié à exécuter à nouveau.

Je m'attendais à ce que le code ci-dessus exécute le travail une fois (après environ 15 secondes), puis planifiez l'exécution du travail dans un mois.

Perphaps la question est tout simplement la façon dont je me sers Quartz.NET tout j'ai expérimenté ou, peut-être, mes attentes ont tort? Soit façon, je serais heureux de vous remercier pour l'aide/les suggestions pour m'expliquer le comportement que j'ai observé, et ce que je dois changer pour obtenir le comportement de que vous voulez.

Répondre

1

Je dois être en retard mais j'essayais de mettre en œuvre la même solution et j'ai fini ici. Je pense que vous devriez jouer le rôle de planificateur après avoir défini les tâches et les déclencheurs.

Questions connexes