2017-09-10 9 views
0

J'essaie de programmer un Executors avec newSingleThreadScheduledExecutor qui envoie un rapport après 10 jours (à partir de l'initialisation du système), après 20 jours (à partir de l'initialisation du système) et tous les 1er du mois. J'ai essayé d'utiliser newSingleThreadScheduledExecutor qui s'exécute tous les jours et vérifie si aujourd'hui est après 10 jours .. 20 jours et etc. Mais, je pense que nous avons une façon plus élégante de résoudre ce problème avec certains exécuteurs. Avez-vous une idée de comment améliorer mon code?Executeurs Planifier dans différents intervalles

Le planificateur:

scheduler.scheduleWithFixedDelay(() -> { 
     try { 
      createReport(); 
     } catch (Exception e) { 
      log.error("Error to create engagement report", e); 
     } 
    }, 1, 1, TimeUnit.DAYS); 

et la fonction CreateReport - Je vérifie les dates.

Merci!

+0

Regardez une bibliothèque comme «Quartz» à http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/ –

Répondre

0

Finalement, j'utilise le calendrier de ScheduledExecutorService que l'initialisation dans le constructeur:

scheduler.schedule(createTask , nextDayOfTask, TimeUnit.DAYS); 

Donc, chaque fois que je la createTask - je re-calc lorsque le prochain rapport devrait sortir et mettre à jour le calendrier.

public Runnable createTask = new Runnable() { 
    @Override 
    public void run() { 
     // Do What Ever You Need 
     scheduler.schedule(this, nextDayOfTask, TimeUnit.DAYS); 
    } 
};