0
votes

Pourquoi mon travail de quartz ne se déclenche-t-il pas selon l'expression cron donnée, mais se déclenche-t-il toutes les 10 minutes?

J'essaie de créer un travail qui s'exécutera tous les samedis à 20 heures en utilisant l'entrée d'expression cron dans le planificateur de déclenchement. Mais mon travail est exécuté toutes les 10 minutes? Qu'est-ce que j'ai fait de mal ici, aidez-moi s'il vous plaît. Ma pile de configuration d'application est Spring Boot + Hibernate. Le code est comme suit.

    @Bean(name = "emailReportJobDetail")
    public JobDetail emailReportJobDetail() {
        return newJob().ofType(EmailReportJob.class).storeDurably().withIdentity(JobKey.jobKey("Qrtz_EmailReportProcessor")).withDescription("Invoke EmailReportProcessor Job service...").build();
    }

    @Bean
    public Trigger emailReportTrigger(@Qualifier("emailReportJobDetail") JobDetail job) {

        logger.info("Configuring emailReportTrigger to fire every Saturday 8 PM GMT");

        return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_EmailReportProcessor")).withDescription("EmailReportProcessor trigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0 20 ? * SAT")
                )
                .build();
    }


2 commentaires

@ user85421 le même problème persiste. ressemble peut-être à un problème lors de la réinitialisation des anciennes informations de déclenchement.


Mon mauvais, il n'y a rien de mal avec le code. J'avais un autre déclencheur dans la DB avec un nom similaire. Cela tirait toutes les dix minutes.


4 Réponses :


0
votes

Format Crontab :

# 1. Entry: Minute when the process will be started [0-60]
# 2. Entry: Hour when the process will be started [0-23]
# 3. Entry: Day of the month when the process will be started [1-28/29/30/31]
# 4. Entry: Month of the year when the process will be started [1-12]
# 5. Entry: Weekday when the process will be started [0-6] [0 is Sunday] or 
            use sun, mon, tue, wed, thu, fri, or sat
#
# all x min = */x

Donc, selon ce 0 20 * * sat fonctionnerait à 20h00 tous les samedis.

Un outil utile est: CronTab Guru où vous pouvez entrer votre expression et il affichera son résultat.


2 commentaires

Non @AdilOoze, le format est différent pour le planificateur à quartz - quartz-scheduler.org/documentation/quartz-2.3.0/tutorials / ...


Ah merci de m'avoir corrigé, j'ignorais cela.



1
votes

Essayez de définir l' expression cron 0 0 20 ? * 7 et en ajoutant également un fuseau horaire

return  newTrigger()
        .forJob(job)
        .withIdentity(TriggerKey.triggerKey("Qrtz_EmailReportProcessor"))
        .inTimeZone(TimeZone.getTimeZone(YOUR_TIME_ZONE))
        .withDescription("EmailReportProcessor trigger")
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0 20 ? * 7"))
        .build();

Bien que l' expression cron 0 0 20 ? * SAT est également correct, essayez ceci et conservez également un journal dans la classe EmailReportJob .


0 commentaires

1
votes

la plupart du temps, vous avez un travail du même nom dans la base de données, qui doit être mis à jour par un autre membre du cluster.

Soit vous pouvez essayer de renommer votre travail (clé de travail), soit vérifier si la base de données n'est pas utilisée par quelqu'un d'autre.

Néanmoins, un job met à jour sa configuration au démarrage.


0 commentaires

0
votes

J'ai le même problème avec une raison différente, c'est pourquoi poster ceci. J'ai personnalisé le schéma QUARTZ avec des tableaux personnalisés. Par exemple, JOB_DETAILS, TRIGGERS et CRON_TRIGGERS sont des tables réelles. J'ai créé des tables avec le préfixe QRTZ_ à chaque table.

Lors du démarrage de l'application, les travaux sont enregistrés et les déclencheurs sont enregistrés et les enregistrements sont présents dans les tables comme prévu. Mais le déclenchement de la tâche ne se produit pas dans l'intervalle de temps CRON suivant. Alors, quelle est l'erreur que j'ai faite?

Il existe une relation entre JOB_DETAILS et TRIGGERS, et TRIGGERS a une relation avec CRON_TRIGGERS et etc. J'ai manqué de spécifier la relation FOREIGN KEY entre ces tables.


0 commentaires