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