Spring Boot - Planification

La planification est un processus d'exécution des tâches pour la période de temps spécifique. Spring Boot fournit un bon support pour écrire un planificateur sur les applications Spring.

Expression Java Cron

Les expressions Java Cron sont utilisées pour configurer les instances de CronTrigger, une sous-classe de org.quartz.Trigger. Pour plus d'informations sur l'expression cron Java, vous pouvez vous référer à ce lien -

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

L'annotation @EnableScheduling est utilisée pour activer le planificateur pour votre application. Cette annotation doit être ajoutée dans le fichier de classe d'application Spring Boot principal.

@SpringBootApplication
@EnableScheduling

public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

L'annotation @Scheduled est utilisée pour déclencher le planificateur pour une période de temps spécifique.

@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() throws Exception {
}

Voici un exemple de code qui montre comment exécuter la tâche toutes les minutes à partir de 9 h 00 et se terminant à 9 h 59, tous les jours

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(cron = "0 * 9 * * ?")
   public void cronJobSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Java cron job expression:: " + strDate);
   }
}

La capture d'écran suivante montre comment l'application a démarré à 09:03:23 et pour chaque minute à partir de ce moment, la tâche du planificateur de tâches cron s'est exécutée.

Taux fixe

Le planificateur à taux fixe est utilisé pour exécuter les tâches à un moment précis. Il n'attend pas la fin de la tâche précédente. Les valeurs doivent être en millisecondes. L'exemple de code est affiché ici -

@Scheduled(fixedRate = 1000)
public void fixedRateSch() { 
}

Un exemple de code pour exécuter une tâche toutes les secondes à partir du démarrage de l'application est affiché ici -

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedRate = 1000)
   public void fixedRateSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Rate scheduler:: " + strDate);
   }
}

Observez la capture d'écran suivante qui montre l'application qui a démarré à 09:12:00 et après cela, chaque deuxième tâche du planificateur à taux fixe s'est exécutée.

Délai fixe

Le planificateur à délai fixe est utilisé pour exécuter les tâches à un moment précis. Il doit attendre la fin de la tâche précédente. Les valeurs doivent être en millisecondes. Un exemple de code est affiché ici -

@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void fixedDelaySch() {
}

Ici, le paramètre initialDelay est le temps après lequel la tâche sera exécutée la première fois après la valeur de retard initiale.

Un exemple pour exécuter la tâche toutes les secondes après 3 secondes après la fin du démarrage de l'application est illustré ci-dessous:

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedDelay = 1000, initialDelay = 3000)
   public void fixedDelaySch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Delay scheduler:: " + strDate);
   }
}

Observez la capture d'écran suivante qui montre l'application qui a démarré à 09:18:39 et toutes les 3 secondes, la tâche du planificateur de délai fixe s'est exécutée toutes les secondes.