Existe-t-il une implémentation de ScheduledExecutorService semblable à un cron en Java?

StackOverflow https://stackoverflow.com/questions/469884

  •  19-08-2019
  •  | 
  •  

Question

Le ScheduledExecutorService en Java est très pratique pour la répétition de tâches avec des intervalles ou des délais fixes. Je me demandais s’il existait quelque chose comme le service ScheduledExecutorService existant qui vous permet de spécifier une heure de la journée pour planifier la tâche, plutôt qu’un intervalle, à savoir: "Je souhaite que cette tâche soit déclenchée à 10 heures chaque jour".

Je sais que vous pouvez réaliser cela avec Quartz, mais je préférerais ne pas utiliser cette bibliothèque si possible (c’est une excellente bibliothèque mais je préférerais ne pas avoir la dépendance pour plusieurs raisons).

Autres conseils

Un peu plus de recherches ont abouti CronExecutorService dans HA-JDBC. Il est intéressant de noter qu’elle dépend de Quartz pour son CronExpression classe, mais c'est tout. Ce n'est pas si mal.

Mise à jour: j'ai corrigé les liens rompus pour qu'ils pointent vers les nouvelles versions, mais je ne sais plus si c'est la seule dépendance qui existe maintenant

ThreadPoolTaskScheduler, peut être utilisé chaque fois que la gestion des threads externes n’est pas requise. En interne, il délègue à une instance ScheduledExecutorService . ThreadPoolTaskScheduler implémente également l’interface TaskExecutor de Spring, de sorte qu’une seule instance puisse être utilisée pour une exécution asynchrone ainsi que des exécutions planifiées et potentiellement récurrentes.

Où CronTrigger () utilise-t-il cronExpression? rel = "nofollow noreferrer"> http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

Pour plus d'informations sur cette solution, reportez-vous à la documentation Spring: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;

public class CronTriggerSpringTest{
public static void main(String args[]){
    String cronExpression = "0/5 * * * * *";
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.initialize();
    scheduler.schedule(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello Date:"+new Date());
        }
    }, new CronTrigger(cronExpression));
}
}

Lorsque vous utilisez scheduleAtFixedRate, vous indiquez un délai. Donc, le retard peut être la différence à 10 heures et la période est de 24 heures. Cela pourrait dériver un peu, même avec une minuterie. Vous pouvez donc planifier une tâche qui s’ajoute au service ScheduledExecutorService avec un délai approprié à chaque fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top