====== Ordonnanceur de tâches sous JAVA avec Spring ====== Usage de la librairie Quartz (anciennement de chez Opensymphony) Site officiel : [[http://quartz-scheduler.org|quartz-scheduler.org]] Ajouter la librairie dans le //pom.xml// du projet: org.quartz-scheduler quartz 1.8.4 création du fichier //quartz-context.xml// : code //Java// : package com.gwadanina.job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; import org.springframework.stereotype.Component; /** * */ @Component public class MyJob extends QuartzJobBean { /** * Logger. */ private static Logger log = LoggerFactory.getLogger(MyJob.class); /** * @param context * * @throws JobExecutionException */ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { log.info("do the job ..."); } } code //Java Simple// : package com.gwadanina.job; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.stereotype.Component; /** * */ @Component public class MySimpleJob implements Job { /** * Logger. */ private static Logger log = LoggerFactory.getLogger(MySimpleJob.class); @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("do the job ..."); } } Liste des jobs chargés par Spring au lancement de l'application: package com.gwadanina.job; import com.gwadanina.spring.ApplicationContextHolder; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import java.util.Date; import java.util.Iterator; import java.util.List; public class ListeDesJobs { /** * logger */ static Logger log = LoggerFactory.getLogger(ListeDesJobs.class); public static void main(String[] args) throws SchedulerException { Scheduler scheduler = ApplicationContextHolder.getBean(SchedulerFactoryBean.class).getScheduler(); String[] jobGroupNames = scheduler.getJobGroupNames(); for (int idGroup = 0; idGroup < jobGroupNames.length; idGroup++) { String jobGroupName = jobGroupNames[idGroup]; String[] jobNames = scheduler.getJobNames(jobGroupName); for (int idxJob = 0; idxJob < jobNames.length; idxJob++) { StringBuffer informations = new StringBuffer(); String jobName = jobNames[idxJob]; JobDetail jobDetail = scheduler.getJobDetail(jobName, jobGroupName); Trigger[] triggersOfJob = scheduler.getTriggersOfJob(jobName, jobGroupName); informations.append("jobGroupName : " + jobGroupName); informations.append(", jobName : " + jobName); informations.append(", description : " + jobDetail.getDescription()); List jobExecutionContexts = scheduler.getCurrentlyExecutingJobs(); for (int trigger = 0; trigger < triggersOfJob.length; trigger++) { Trigger aTrigger = triggersOfJob[trigger]; Date nextFireTime = aTrigger.getNextFireTime(); informations.append(", nextFireTime : " + nextFireTime); } for (Iterator iterator = jobExecutionContexts.iterator(); iterator.hasNext(); ) { JobExecutionContext jobContext = (JobExecutionContext) iterator.next(); if (jobContext.getJobDetail() == jobDetail) { informations.append(", En cours d'execution..."); } } log.info(informations.toString()); } } } } Afin de lancer le job onDemande exécutez la commande suivante: Scheduler scheduler = ApplicationContextHolder.getBean(SchedulerFactoryBean.class).getScheduler(); try { scheduler.triggerJobWithVolatileTrigger(jobName, jobGroupName); } catch (SchedulerException e) { throw new SystemException(e); }