Gibt es eine cron-ähnliche Implementierung von ScheduledExecutorService in Java?
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).
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
istThreadPoolTaskScheduler, 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.