Planification de l'acquisition de l'expression quartz/ressort cron après N fois de temps d'exécution, avant N fois de temps d'exécution

Aperçu:

Quartz est un framework de planification léger et open source qui permet d'exécuter des tâches à un moment précis ou avec une certaine fréquence. Lors de l'utilisation de Quartz, des dépendances Quartz doivent être introduites, afin que la fonction de planification fournie par Quartz puisse être utilisée dans le projet.

Cet article se concentrera sur la fonction d'obtention du temps d'exécution dans Quartz. Mais il n'y a actuellement aucune API prête à l'emploi, qui est utilisée pour obtenir le temps d'exécution de l'expression cron spécifiée après et avant l'heure actuelle, j'ai donc implémenté deux fonctions : computeFireTimesAfter() et computeFireTimesPre()

Dans l'implémentation spécifique, on peut appeler ces deux méthodes en passant l'expression cron et le nombre de fois à obtenir. La méthode computeFireTimesAfter() obtiendra le temps d'exécution de l'expression cron spécifiée après l'heure actuelle, et la méthode computeFireTimesPre() obtiendra le temps d'exécution de l'expression cron spécifiée avant l'heure actuelle.

Lors de l'implémentation de ces deux méthodes, nous devons instancier un objet CronTriggerImpl et définir son expression cron. Ensuite, obtenez la prochaine exécution en appelant la méthode getFireTimeAfter(). Afin d'obtenir plusieurs temps d'exécution, nous devons appeler en permanence la méthode getFireTimeAfter() dans une boucle et mettre à jour l'heure actuelle à la prochaine heure d'exécution. Pour faciliter l'utilisation, nous fournissons également une méthode de formatage de date pour convertir l'heure du type Date en une heure au format chaîne.

  1. L'introduction du quartz dépend de

    org.quartz-scheduler
    quartz
    2.3.0
  2. Obtenir le temps de fonctionnement
    a. Après plusieurs temps de fonctionnement :

Paramètres entrants : expression cron, temps d'exécution
public static List computeFireTimesAfter(String cron, int count) throws ParseException { List runTime = Lists.newArrayList(); // instancier le déclencheur CronTriggerImpl cronTrigger = new CronTriggerImpl(); cronTrigger.setCronExpression( new CronExpression( cron));



    // 获取当前时间
    Date currentTime = new Date();

    while (count-- > 0) {
        // 获取下次运行时间
        Date   nextFireTime      = cronTrigger.getFireTimeAfter(currentTime);
        String formattedDateTime = formatTime(nextFireTime);
        runTime.add(formattedDateTime);
        // 更新当前时间为下次运行时间
        currentTime = nextFireTime;
    }

    return Collections.unmodifiableList(runTime);
}

b. Temps de course précédents :

Paramètres entrants : expression cron, temps d'exécution
public static Set computeFireTimesPre(String cron, int count) throws ParseException { Calendar calendar = Calendar.getInstance(); Date now = calendar.getTime(); CronTriggerImpl cronTrigger = new CronTriggerImpl(); cronTrigger. setCronExpression(cron); Set set = new LinkedHashSet<>(); while (set.size() < count) { // Récupère l'heure du mois précédent calendar.add(Calendar.MONTH, -1); List dates = TriggerUtils.computeFireTimesBetween( cronTrigger, null, calendar.getTime(), now).stream().map(each -> formatTime(each)).collect(Collectors.toList()); Collections.reverse( dates); // Quittez la boucle si le nombre d'acquisitions prévu est atteint, sinon avancez d'un mois pour obtenir le temps d'exécution if (dates.size() < count) {













set.addAll(dates);
} else { set.addAll(dates.subList(0, count)); } } retour ensemble ; }




private static String formatTime(Date nextFireTime) {
    LocalDateTime localDateTime     = LocalDateTime.ofInstant(nextFireTime.toInstant(), ZoneId.systemDefault());
    String        formattedDateTime = localDateTime.format(COMMON_TIME_PATTERN);
    return formattedDateTime;
}

2. Calculer le nombre de tâches à exécuter par cron
Pour obtenir le nombre de fois que la tâche de l'expression Cron définie dans Quartz sera exécutée, vous pouvez utiliser les méthodes getNextValidTimeAfter() et getFireTimeAfter() de la classe CronTrigger pour calculer le temps de déclenchement. Voici un exemple d'extrait de code qui montre comment utiliser la classe CronTrigger pour compter le nombre d'exécutions d'une tâche :

importer org.quartz.CronExpression ;
importer org.quartz.CronTrigger ;
importer org.quartz.impl.triggers

.CronTriggerImpl ;
importer java.text.ParseException ;
importer java.util.Date ;

classe publique QuartzCronExpressionExample {

public static void main(String[] args) throws

ParseException {

    // 创建 CronTrigger 对象
    CronTriggerImpl trigger = new CronTriggerImpl();
    trigger.setCronExpression

("0 0/5 * * * ?"); // Définir l'expression Cron pour qu'elle s'exécute toutes les 5 minutes

    // 计算任务将会执行的次数
    CronExpression cronExpression = new CronExpression(trigger.getCronExpression());
    Date nextValidTime = cronExpression.getNextValidTimeAfter(new Date());
    Date endTime = new Date(nextValidTime.getTime() + (5 * 60 * 1000)); // 设置任务的结束时间,5 分钟后

    int count = 0;
    while (nextValidTime.before(endTime)) {
        System.out.println("Task will run at: " + nextValidTime);
        nextValidTime = cronExpression.getFireTimeAfter(nextValidTime);
        count++;
    }

    System.out.println

("La tâche s'exécutera " + compte + " fois.");
}
}

Guess you like

Origin blog.csdn.net/qq_34690003/article/details/131931572