Condivisione della tecnologia

SpringBoot giornaliero: l'implementazione @Scheduled viene eseguita una volta all'avvio del servizio

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Parlando di attività pianificate, dovremmo pensare a @Scheduled, Quartz e XXL-JOB. Tuttavia, alcuni singoli servizi o piccoli progetti possono utilizzare direttamente @Scheduled per implementare attività asincrone per comodità e velocità. Pertanto, i requisiti del tema di questo articolo vengono estesi.

Quando @Scheduled viene utilizzato in un progetto, come è possibile eseguire l'attività asincrona specificata in anticipo all'avvio del progetto?

1. Spiegazione dettagliata di @Scheduled

L'annotazione @Scheduled supporta più parametri per controllare in modo flessibile il tempo di esecuzione dell'attività.

  • cron: espressione Cron, che può controllare accuratamente secondi, minuti, ore, giorni, mesi, settimane, ecc.
    Inserisci qui la descrizione dell'immagine
  • zona: ricevi un fuso orario, ad esempio Asia/Shanghai, il fuso orario che utilizziamo generalmente. Di solito lasciamo vuoto questo campo.
  • FixedDelay: quanto tempo dopo l'ora di completamento dell'ultima esecuzione verrà eseguita nuovamente. Come @Scheduled(fixedDelay = 5000)
  • FixedDelayString: ha lo stesso significato di FixedDelay, ma sotto forma di stringa. L'unica differenza è che supporta i segnaposto, come @Scheduled(fixedDelayString = "5000")
  • FixedRate: quanto tempo dopo l'ultimo avvio del tempo di esecuzione, ad esempio @Scheduled(fixedRate = 5000)
  • FixedRateString: ha lo stesso significato di FixedRate, ma sotto forma di stringa. L'unica differenza è che i segnaposto sono supportati.
  • partialDelay: quanto tempo ritardare l'esecuzione per la prima volta. Ad esempio, verrà eseguita dopo il primo ritardo di 1 secondo, quindi verrà eseguita ogni 5 secondi secondo la regola FixedRate @Scheduled(initialDelay=1000, FixedRate= 5000)
  • partialDelayString: ha lo stesso significato di partialDelayString, ma sotto forma di stringa. L'unica differenza è che i segnaposto sono supportati.

2. Implementazione logica

1. Creare un metodo logico per l'attività pianificata

/**
 * @Author 码至终章
 * @Version 1.0
 */
@Component
public class ScheduledTest {

    @Scheduled(cron = "* 1 * * * ?")
    public void task1() throws Exception{
        System.out.println("task1 执行: " + Thread.currentThread() + "-" + DateTime.now());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2. Creare una nuova classe di esecuzione di avvio

Questa classe chiama principalmente manualmente il metodo dell'attività specificato all'avvio

/**
 * @Author 码至终章
 * @Version 1.0
 */
@Component
public class StartupTasks {

    private final ScheduledTest scheduledTasks;

    public StartupTasks(ScheduledTest scheduledTasks) {
        this.scheduledTasks = scheduledTasks;
    }

    @PostConstruct
    public void startUp() {
        try {
            System.out.println("服务启动执行任务");
            scheduledTasks.task1();
        }catch (Exception e){
			e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

Nota: ricordarsi di aggiungere @EnableScheduling alla classe di avvio in modo che l'attività pianificata venga eseguita. Ovviamente ciò non influisce sul test logico di questo articolo.

3. Risultati dei test

Dopo l'avvio del servizio, visualizzare le informazioni di stampa
Inserisci qui la descrizione dell'immagine