Quarz planifie le travail en jetant des erreurs

J’ai de la difficulté à utiliser Quarz pour planifier des tâches dans une application Java basée sur Spring. Voici mon job personnalisé:

import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.package.UserService; @Component public class ConnectionIntervalJob implements Job { @Autowired private UserService userService; public void execute(JobExecutionContext jExeCtx) throws JobExecutionException { userService.calculateDelta(); } } 

Ma classe ConnectionScheduler:

 import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; public class ConnectionScheduler { public ConnectionScheduler() throws Exception { Scheduler scheduler = new StdSchedulerFactory().getScheduler(); JobDetail job = JobBuilder .newJob(com.package.ConnectionIntervalJob.class) .withIdentity("job1" + (int)Math.floor(Math.random()*10) + 3 , "group1" +(int)Math.floor(Math.random()*10) + 3).build(); Trigger sortinggger = TriggerBuilder .newTrigger() .withIdentity("sortinggger" +(int)Math.floor(Math.random()*10) + 3, "group1" +(int)Math.floor(Math.random()*10) + 3) .withSchedule( SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(20).withRepeatCount(5)) .build(); try { scheduler.start(); scheduler.scheduleJob(job, sortinggger); } catch (SchedulerException e) { e.printStackTrace(); } } } 

Lorsque je construis mon projet avec Apache Tomcat 7. La console consigne des erreurs:

 ERROR org.quartz.core.JobRunShell - Job group163.job163 threw an unhandled Exception: java.lang.NullPointerException at com.package.jobs.ConnectionIntervalJob.execute(ConnectionIntervalJob.java:18) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [DefaultQuartzScheduler_Worker-1] ERROR org.quartz.core.ErrorLogger - Job (group163.job163 threw an exception. org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NullPointerException] at org.quartz.core.JobRunShell.run(JobRunShell.java:213) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: java.lang.NullPointerException at com.pakage.jobs.ConnectionIntervalJob.execute(ConnectionIntervalJob.java:18) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ... 1 more 

Je suppose que je dérange quelque chose avec le nom du travail et le nom du déclencheur. Pour cette raison, j’ai décidé de générer un int aléatoire et de l’append au nom du groupe et au nom du déclencheur, mais cela n’a pas fonctionné. J’ai utilisé le lien suivant comme référence:

METTRE À JOUR:

               

Toute aide est appréciée! Je vous remercie!

Vous obtenez probablement le NPE parce que le travail de quartz n’est pas créé par le spring, donc l’injection ne fonctionnera pas.

Essayez de mettre les éléments suivants en première ligne dans la méthode execute() .

 SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 

Cela assurera que les dépendances sont injectées dans le travail.

Modifier L’autre option que vous avez est d’utiliser l’intégration Spring-quartz au lieu d’utiliser du quartz pur.