Gibt es eine cron-ähnliche Implementierung von ScheduledExecutorService in Java?

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

  •  19-08-2019
  •  | 
  •  

Frage

Die ScheduledExecutorService in Java sind ziemlich praktisch für Aufgaben entweder mit festen Intervallen oder fester Verzögerung zu wiederholen. Ich habe mich gefragt, ob es ein so etwas wie die bestehende ScheduledExecutorService ist, dass Sie eine Uhrzeit angeben kann an die Aufgabe zu planen, anstatt ein Intervall das heißt: „Ich mag diese Aufgabe um 10 Uhr jeden Tag zu feuern“.

Ich weiß, dass Sie dies mit Quarz erreichen kann, aber ich möchte lieber nicht, dass die Bibliothek verwenden, wenn möglich (es ist eine große Bibliothek, aber ich möchte lieber nicht die Abhängigkeit für ein paar Gründe haben).

War es hilfreich?

Lösung

Sie können mit dem Timer Klasse. Insbesondere scheduleAtFixedRate (Timertask Aufgabe, Datum firsttime, lange Zeit). Wo Sie eine Aufgabe einstellen können um 10 Uhr an einem bestimmten Tag zu starten und wiederholen sich alle 24 Stunden.

Andere Tipps

Ein bisschen mehr Suchaufgedreht hat CronExpression Klasse, aber das ist es. Das ist nicht so schlimm.

Update: Ich habe die defekten Links festgelegt auf neue Versionen zu zeigen, aber ich weiß nicht, ob das die einzige Abhängigkeit mehr

ist

ThreadPoolTaskScheduler, kann verwendet werden, wenn externes Thread-Management ist keine Voraussetzung. Intern delegiert an eine ScheduledExecutorService Instanz. ThreadPoolTaskScheduler implementiert Spring TaskExecutor Schnittstelle zu, so dass eine einzelne Instanz kann auch für die asynchrone Ausführung verwendet werden, wie geplant, und möglicherweise wiederkehrende, Hinrichtung.

Dabei gilt als CronTrigger () nimmt in cronExpression http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

Weitere Informationen zu dieser Lösung Frühling docs verweisen: 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));
}
}

Wenn Sie scheduleAtFixedRate verwenden bieten Sie eine Verzögerung. So kann die Verzögerung sein, die Differenz bis 10 Uhr und beträgt 24 Stunden. Dies könnte ein bisschen treiben, auch mit einem Timer so, was Sie tun können, ist eine Aufgabe planen, die sich mit einer entsprechenden Verzögerung jedes Mal an die ScheduledExecutorService hinzufügt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top