Exemple pour exécuter plusieurs tâches dans Quartz

Exemple pour exécuter plusieurs tâches dans Quartz

Dans cet exemple, nous vous montrons comment déclarer plusieurs tâches Quartz via les API Quartz, Quartz XML et Spring. Dans le cadre du planificateur Quartz, chaque travail sera attaché à un déclencheur unique et l'exécutera par le planificateur.

P.S In Quartz, one trigger for multiple jobs is not possible. (Corrigez-moi si c'est faux.)

1. API Quartz

Créez 3 jobs Quartz, JobA, JobB et JobC.

package com.example.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobA implements Job {

    @Override
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        System.out.println("Job A is runing");
    }

}
package com.example.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobB implements Job {

    @Override
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        System.out.println("Job B is runing");
    }

}
package com.example.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobC implements Job {

    @Override
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        System.out.println("Job C is runing");
    }

}

Utilisez les API Quartz pour déclarer au-dessus de 3 Jobs, assignés à 3 déclencheurs particuliers et les planifier.

package com.example.quartz;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class CronTriggerExample {
    public static void main( String[] args ) throws Exception
    {

    JobKey jobKeyA = new JobKey("jobA", "group1");
        JobDetail jobA = JobBuilder.newJob(JobA.class)
        .withIdentity(jobKeyA).build();

        JobKey jobKeyB = new JobKey("jobB", "group1");
        JobDetail jobB = JobBuilder.newJob(JobB.class)
        .withIdentity(jobKeyB).build();

        JobKey jobKeyC = new JobKey("jobC", "group1");
        JobDetail jobC = JobBuilder.newJob(JobC.class)
        .withIdentity(jobKeyC).build();


        Trigger trigger1 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName1", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Trigger trigger2 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName2", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Trigger trigger3 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName3", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Scheduler scheduler = new StdSchedulerFactory().getScheduler();

        scheduler.start();
        scheduler.scheduleJob(jobA, trigger1);
        scheduler.scheduleJob(jobB, trigger2);
        scheduler.scheduleJob(jobC, trigger3);

    }
}

Sortie

Job A is runing //every 5 seconds
Job B is runing
Job C is runing
Job A is runing //every 5 seconds
Job B is runing
Job C is runing

2. Exemple XML Quartz

La version équivalente dans un fichier XML. Assurez-vous que «quartz.properties» et «quartz-config.xml» se trouvent dans le chemin de classe du projet.

Fichier - quartz.properties

org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

Fichier - quartz-config.xml




    
        
            JobA
            GroupDummy
            This is Job A
            com.example.quartz.JobA
        

        
            
                dummyTriggerNameA
                JobA
                GroupDummy
                
                0/5 * * * * ?
            
        
    

    
        
            JobB
            GroupDummy
            This is Job B
            com.example.quartz.JobB
        

        
            
                dummyTriggerNameB
                JobB
                GroupDummy
                
                0/5 * * * * ?
            
        
    

Fichier: web.xml




    
       org.quartz.ee.servlet.QuartzInitializerListener
   

3. Exemple de printemps

La version équivalente au printemps.

package com.example.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class JobA extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext arg0)
        throws JobExecutionException {
        System.out.println("Job A is runing");
    }

}
package com.example.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class JobB extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext arg0)
        throws JobExecutionException {
        System.out.println("Job B is runing");

    }

}
package com.example.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class JobC extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext arg0)
        throws JobExecutionException {
        System.out.println("Job C is runing");

    }

}

File : Spring-Quartz.xml - Déclare les travaux et les déclencheurs dans le fichier de configuration du bean XML Spring.



    
    
    

    
    
        
    

    
        
    

    
        
    

    
    
        
        
    

    
        
        
    

    
        
        
    

    
        
            
                
                
                
            
        
    

Exécuter

package com.example.common;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) throws Exception {
        new ClassPathXmlApplicationContext("Spring-Quartz.xml");

    }
}

Production.

INFO: Starting beans in phase 2147483647
Jul 30, 2012 10:38:13 PM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler
INFO: Starting Quartz Scheduler now
Job A is runing
Job B is runing
Job C is runing
Job A is runing
Job B is runing
Job C is runing

Télécharger le code source