Le quartz ne tire pas sur une simple gâchette

Cela devrait être assez simple, mais je ne vois aucun travail en cours d’exécution. J’ai un point d’arrêt sur la méthode execute () de la tâche, aucun thread n’y arrive jamais. Je ne comprends pas ce qui ne va pas.

le travail

class Printer implements Job{ public Printer(){ System.out.println("created printer"); } @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("hi" + context.getFireTime()); } } 

La classe principale

 class MyClass { public static void main(Ssortingng[] args) throws Throwable { Scheduler s = StdSchedulerFactory.getDefaultScheduler(); JobDetail job = newJob(Printer.class).build(); CronTrigger sortinggger = newTrigger() .withIdentity("a", "t") .withSchedule(cronSchedule("0/5 * * * * ?").inTimeZone(TimeZone.getDefault())) .forJob(job).build(); s.scheduleJob(job, sortinggger); // This prints the right date! System.out.println(sortinggger.getNextFireTime()); s.start(); } } 

EDIT : J’ai découvert que je n’avais pas le fichier quartz.property. Il était donc possible que le pool de threads pour quartz ne soit jamais créé. Par conséquent, comme indiqué dans la documentation , j’ai remplacé le code à l’aide de StdSchedulerFactory par le suivant:

 DirectSchedulerFactory.getInstance().createVolatileScheduler(10); Scheduler s = DirectSchedulerFactory.getInstance().getScheduler(); 

Devine quoi? Pas de chance encore. Même effet identique. L’application rest en vie, le déclenchement n’est pas déclenché.

J’ai trouvé la solution: changer la visibilité de la classe définissant le travail (Imprimante) en public permettra à Quartz d’y accéder et de l’exécuter.

 public class Printer implements Job{ // just add 'public'! public Printer(){ System.out.println("created printer"); } @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("hi" + context.getFireTime()); } } 

C’est compréhensible, puisqu’il est seulement possible de passer un .class .class au planificateur (bon sang, pourquoi ??) et non, par exemple, aux objects anonymes.

Ceci étant dit, je trouve vraiment bouleversant la façon dont Quartz échoue silencieusement au lancement de tâches sans un seul message d’erreur.