2011-08-12 10 views
13

Uygulamamız kapsamında yapılandırılan birkaç Quartz işimiz var. Geliştirme sırasında, kuvars zamanlayıcıyı bekleme durumunda bırakıyoruz - ancak bazen bir işi manuel olarak başlatmak istiyoruz (geliştirme amacıyla). Eğer fireTrigger'i ararsam, programlayıcıyı başlatmam gerektiğini söyler. Ancak, zamanlayıcıyı başlatırsam, hemen tüm diğer işleri de zamanlayacağım, istediğim gibi değil (manuel olarak işten çıkarılmış işi ayıklarken tetikleyebilirler). Bir işi ateşlemesi için basit bir yol (el duraklatma ve tekleme ile uğraşmak zorunda kalmadan var mı ben zamanlayıcı başladığında tüm duraklatabilirQuartz işlerini elle ateşleme

tetikler ama sonra tekleme talimatları vb

uğraşmak zorunda yani zamanlayıcı bekleme modunda olsa bile çalışan bir fireTrigger)?

cevap

0

Sen yürütme uçucu olmadığı zaman veto katacak programlayıcınız içinde

this.scheduler.addGlobalTriggerListener(new DebugExecutionFilter()); 

ayıklama yürütme filtresi tetikleyici filtresi eklemek için deneyebilirsiniz (hemen yayınlanmasının planlandığı değil) ve hata ayıklama modunda bulunmaktadır.

private static class DebugExecutionFilter implements TriggerListener 
{ 

    public DebugExecutionFilter() 
    { 
    } 

    @Override 
    public String getName() 
    { 
     return "Task execution filter"; 
    } 

    @Override 
    public void triggerFired(Trigger trigger, JobExecutionContext context) 
    { 
     // Do nothing 
    } 

    /* (non-Javadoc) 
    * 
    * @see org.quartz.TriggerListener#vetoJobExecution(org.quartz.Trigger, org.quartz.JobExecutionContext) */ 
    @Override 
    @SuppressWarnings("unchecked") 
    /** 
    * A veto is added if : 
    * - For non volatile trigger if we are in debug mode 
    */ 
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) 
    { 

     try 
     { 
      // 
      if (!trigger.isVolatile() && isDebugMode()) 
      { 
       return true; 
      } 

      //task is run by scheduler.triggerJobWithVolatileTrigger() for immediate schedule 
      //or task is schedule and we are not in debugMode 
      return false; 
    } 


    @Override 
    public void triggerMisfired(Trigger trigger) 
    { 
     // do nothing 
    } 

    @Override 
    public void triggerComplete(Trigger trigger, JobExecutionContext context, int triggerInstructionCode) 
    { 
     // do nothing 
    } 

} 
+0

Yanıt mmounirou için teşekkürler! Belki de konuyu tam olarak açıklamamıştım, ama aslında durdurulamayan tetikleyicilerin geliştirme modunda çalıştırılmasını istiyorum. Yalnızca geliştirme modunda, programlayıcılar bekleme modunda bırakılır ve tüm tetikleyiciler varsayılan olarak duraklatılır. Şimdi planlanmış işler sayfamıza gidersem ve işlerden birini manuel olarak yürütme niyetiyle programlayıcılardan birini başlatırsam (her işin yanında, şimdi "şimdi çalıştır" düğmesine basarsak, diğer tüm işler yanlış devreye girer). Temelde duraklatılmış işlerin geliştirme modunda tekleme yapmamasını istiyorum - bunu yapmanın küresel bir yolu olabilir mi? –

16

bu elle işi ateşe gerektirecektir döngü: Burada

bir uygulama örneğidir

scheduler = stdSchedulerFactory.getScheduler(); 
    //note: "stdSchedulerFactory" is the object created of 
    //the schedulerFactory(Standard) class. 


    // loop jobs by group 
    for (String groupName : scheduler.getJobGroupNames()) { 

    // get jobkey 
    for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher 
     .jobGroupEquals(groupName))) { 

     String jobName = jobKey.getName(); 
     String jobGroup = jobKey.getGroup(); 

     scheduler.triggerJob(jobName, jobGroup); 
    } 

    } 
+1

Bu cevap sizin için çalışıyorsa UP işaretlemeyi unutmayın! –

+0

TriggerJob() işlevi JobKey parametresi olarak alındığında artık 2.2.1'de çalışmaz. [Dokümana bakınız] (http://www.quartz-scheduler.org/api/2.2.1/org/quartz/Scheduler.html#triggerJob (org.quartz.JobKey)) @ Minarul-Haque respsonse yerine kullanın –

0

start-time ve end-time gerek yok.

<trigger> 
     <cron> 
     <name>TestTrigger</name> 
     <group>CronSampleTrigger</group> 
     <description>CronSampleTrigger</description> 
     <job-name>TestJob</job-name> 
     <job-group>jobGroup1</job-group>  

    <!--<start-time>1982-06-28T18:15:00.0Z</start-time> 
     <end-time>2020-05-04T18:13:51.0Z</end-time>--> 

     <cron-expression>0 0/1 * * * ?</cron-expression> 
     </cron> 
</trigger> 
2

Quartz Zamanlayıcıda kayıtlı tüm İşler, bir isim ve gruptan oluşan JobKey tarafından benzersiz şekilde tanımlanır. Belirli bir JobKey'e sahip olan işi, Zamanlayıcı örneğinizin triggerJob(JobKey jobKey) numarasını arayarak hemen kovabilirsiniz.

//Create a new Job 
    JobKey jobKey = JobKey.jobKey("myNewJob", "myJobGroup"); 
    JobDetail job =JobBuilder.newJob(MyJob.class).withIdentity(jobKey).storeDurably().build(); 

    //Register this job to the scheduler 
    scheduler.addJob(job, true); 

    //Immediately fire the Job MyJob.class 
    scheduler.triggerJob(jobKey); 

Not:

  • zamanlayıcı uygulamanızda boyunca kullanılan Zamanlayıcı örneğidir. Başlangıç ​​() yöntemi, oluşturulduktan sonra çağrılmalıdır.
  • İş, herhangi bir tetikleyici veya cron ekleyemeyen dayanıklı bir iştir. triggerJob(JobKey jobKey) numaralı telefonu arayarak programlı olarak kovulabilir.