sto provando ad eseguire un'attività a una velocità fissa usando l'annotazione @Scheduled in java spring. tuttavia, sembra che per impostazione predefinita spring non esegua un'attività fixedRate a una velocità fissa se l'attività è più lenta della velocità. c'è qualche impostazione che posso aggiungere alla mia configurazione di primavera per cambiare questo comportamento?come è possibile configurare Spring per eseguire attività FixedRate sovrapposte?
esempio:
@Service
public class MyTask{
@Scheduled(fixedRate = 1000)
public void doIt(){
// this sometimes takes >1000ms, in which case the next execution is late
...
}
}
ho un work-around, ma sembra tutt'altro che ideali. Fondamentalmente, io basta sostituire l'esecutore di default single-thread con un pool di thread, quindi ho un metodo programmato chiamare un metodo asincrono in quanto l'annotazione @Async permette esecuzioni simultanee:
@Service
public class MyTask{
@Async
public void doIt(){
// this sometimes takes >1000ms, but the next execution is on time
...
}
}
@Service
public class MyTaskScheduler{
...
@Scheduled(fixedRate = 1000)
public void doIt(){
myTask.doIt();
}
}
@Configuration
@EnableScheduling
@EnableAsync
public class MySpringJavaConfig{
@Bean(destroyMethod = "shutdown")
public Executor taskScheduler() {
return Executors.newScheduledThreadPool(5);
}
}
dettagli noiosi della mia mondo reale scenario: nel mio codice di produzione ho un compito che richiede tra 10ms e 10 minuti a seconda del carico di lavoro corrente. idealmente, mi piacerebbe catturare un nuovo thread dal pool ogni 1000ms in modo che il numero di thread simultanei aumenti con il carico di lavoro. ovviamente ho un limite superiore sui thread in atto (tra gli altri controlli) per evitare che le cose sfuggano di mano.
apprezzo i riferimenti, e sto studiando la SchedulingConfigurer ed il modello di cron posti di lavoro basato. detto questo, non sono d'accordo con la tua interpretazione di "successivamente" e "successivi", e vorrei una soluzione (comunque scomoda) che realizzi il mio obiettivo. in quanto tale, ho intenzione di aspettare ancora un po 'prima di accettare questa risposta nella speranza che qualcuno possa elaborare una specifica configurazione di molla funzionale. –