Esiste un'implementazione simile a cron di ScheduledExecutorService in Java?

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

  •  19-08-2019
  •  | 
  •  

Domanda

ScheduledExecutorService in Java è abbastanza utile per ripetere attività con intervalli fissi o ritardo fisso. Mi chiedevo se esiste qualcosa di simile al servizio ScheduledExecutor esistente che ti consente di specificare un'ora del giorno in cui pianificare l'attività, piuttosto che un intervallo, ad esempio "voglio che questa attività si attivi alle 10 ogni giorno".

So che puoi ottenerlo con Quartz, ma preferirei non utilizzare quella libreria se possibile (è un'ottima libreria ma preferirei non avere la dipendenza per alcuni motivi).

Altri suggerimenti

Sono state apportate ulteriori ricerche CronExecutorService in HA-JDBC. È interessante notare che ha una dipendenza da Quartz per il suo CronExpression classe, ma il gioco è fatto. Non è poi così male.

Aggiornamento: ho corretto i collegamenti interrotti in modo da puntare a nuove versioni, ma non so più se questa è l'unica dipendenza

ThreadPoolTaskScheduler, può essere utilizzato ogni volta che la gestione di thread esterni non è un requisito. Internamente, delega a un'istanza ScheduledExecutorService . ThreadPoolTaskScheduler implementa anche l'interfaccia TaskExecutor di Spring, in modo che una singola istanza possa essere utilizzata per l'esecuzione asincrona, nonché per esecuzioni pianificate e potenzialmente ricorrenti.

Dove CronTrigger () contiene cronExpression http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

Per ulteriori informazioni su questa soluzione, consultare Documenti di primavera: 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));
}
}

Quando si utilizza scheduleAtFixedRate si fornisce un ritardo. Quindi il ritardo può essere la differenza alle 10 del mattino e il periodo è di 24 ore. Ciò potrebbe spostarsi un po ', anche con un timer, quindi quello che puoi fare è pianificare un'attività che si aggiunge a ScheduledExecutorService con un ritardo adeguato ogni volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top