Condivisione della tecnologia

Scrittura di attività pianificate in Springboot

2024-07-08

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

Parte 1: Introduzione

1.1 L'importanza delle attività pianificate

Nello sviluppo software moderno, le attività pianificate sono una componente chiave dell'automazione delle applicazioni e dell'efficienza operativa. Che si tratti di backup dei dati, controllo dello stato del sistema, generazione regolare di report o processi automatizzati attivati ​​dalle attività degli utenti, le attività pianificate svolgono un ruolo indispensabile. Garantiscono la continuità della logica aziendale e le capacità di automanutenzione del sistema.

1.2 Applicazione delle attività pianificate in diversi campi
  • Sistema di pianificazione delle risorse aziendali (ERP).: le attività pianificate possono essere utilizzate per generare report finanziari, aggiornamenti di inventario, ecc.
  • Sistema di gestione dei contenuti (CMS): pubblica contenuti regolarmente, svuota la cache, ecc.
  • Sistema di gestione delle relazioni con i clienti (CRM).: invia regolarmente e-mail di marketing, promemoria di follow-up dei clienti, ecc.
  • Piattaforma pubblicitaria online: adeguare regolarmente le strategie pubblicitarie, ottimizzare la visualizzazione della pubblicità, ecc.
1.3 Sfide nell'implementazione delle attività pianificate tradizionali

Nel modello di sviluppo tradizionale, l'implementazione delle attività pianificate spesso richiede l'affidamento alle attività pianificate del sistema operativo (come il crontab di Linux) o la scrittura di una logica aziendale complessa. Questi metodi presentano molti inconvenienti:

  • Configurazione complessa: richiede una conoscenza approfondita dell'utilità di pianificazione del sistema operativo.
  • Difficile da mantenere: le attività sono sparse in diversi sistemi e applicazioni, rendendo difficile gestirle e monitorarle in modo uniforme.
  • Scarsa scalabilità: Man mano che la tua azienda cresce, l'aggiunta o la modifica di attività diventa complessa e richiede tempo.
1.4 Soluzione Spring Boot

Essendo un popolare framework Java, Spring Boot fornisce un modo più elegante e integrato per implementare le attività pianificate. Semplifica la configurazione e fornisce API avanzate, consentendo agli sviluppatori di integrare rapidamente le funzioni delle attività pianificate nelle applicazioni.

1.5 Supporto di Spring Boot per le attività pianificate

Lo Spring Boot è passato@EnableSchedulingE@Scheduled Le annotazioni rendono estremamente semplice scrivere e configurare le attività pianificate nelle applicazioni Spring. Inoltre, Spring Boot fornisce anche l'integrazione con Spring Task Scheduler, che fornisce supporto per requisiti di attività pianificate più avanzati.

1.6 Perché scegliere Spring Boot per implementare le attività pianificate
  • Semplifica la configurazione: le attività pianificate possono essere implementate tramite annotazioni e una piccola quantità di configurazione.
  • Facile da integrare: Perfettamente integrato con l'ecosistema Spring, puoi sfruttare altre funzionalità Spring come la gestione delle transazioni, l'inserimento delle dipendenze, ecc.
  • Forte sostegno della comunità: Spring Boot dispone di un'ampia community di sviluppatori che fornisce numerose risorse e best practice.
  • Facile da testare: le attività pianificate di Spring Boot semplificano l'esecuzione di unit test e test di integrazione.

Parte 2: Introduzione a Spring Boot

2.1 Panoramica dello Spring Boot

Spring Boot è sviluppato dal team Pivotal (ora parte di VMware) ed è un framework modulare e rapido di sviluppo e distribuzione basato sul framework Spring. Ha lo scopo di semplificare il processo di installazione e sviluppo iniziale delle applicazioni Spring e di ridurre il lavoro di configurazione degli sviluppatori fornendo una serie di configurazioni predefinite.

2.2 Funzionalità principali di Spring Boot
  • configurazione automatica: Spring Boot può configurare automaticamente le applicazioni Spring in base alle dipendenze nel progetto.
  • Operare in modo indipendente: le applicazioni Spring Boot includono server HTTP integrati (come Tomcat, Jetty o Undertow) e non devono essere distribuite su server esterni.
  • Nessuna configurazione XML richiesta: Spring Boot non richiede l'uso di file di configurazione XML, sebbene supporti comunque la configurazione XML.
  • Supporto dei microservizi: Spring Boot è molto adatto all'architettura dei microservizi ed è facile da creare, distribuire ed espandere.
2.3 Meccanismo di avvio Spring Boot

Viene avviata l'applicazione Spring BootSpringApplication.run() Metodo implementato, creerà e configurerà automaticamente il contesto dell'applicazione Spring. Spring Boot fornisce inoltre un'interfaccia a riga di comando (CLI) e un endpoint Actuator per monitorare e gestire le applicazioni.

2.4 Gestione delle dipendenze Spring Boot

Lo Spring Boot è passatospring-boot-starter-parent Fornisce la gestione delle dipendenze e semplifica la configurazione dei progetti Maven e Gradle. Predefinisce i numeri di versione e gli intervalli di dipendenze, semplificando la gestione dei conflitti di dipendenza e del controllo della versione.

2.5 Comunità di Spring Boot ed ecologia dei plug-in

Spring Boot dispone di una comunità open source attiva che fornisce un gran numero di plugin e "Starter" che contengono le dipendenze necessarie per creare funzionalità specifiche, comespring-boot-starter-webPer creare applicazioni RESTful.

2.6 Esempio: creare una semplice applicazione Spring Boot

Di seguito sono riportati i passaggi per creare una semplice applicazione Spring Boot e il codice di esempio corrispondente:

  1. Creare la struttura del progetto: utilizza Spring Inizializr (https://start.spring.io/) per generare rapidamente la struttura del progetto.
  2. Aggiungi dipendenze: Selezionare ad esempio gli Starter richiestispring-boot-starter-web
  3. Scrivi la classe dell'applicazione principale
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class MyApp {
        public static void main(String[] args) {
            SpringApplication.run(MyApp.class, args);
        }
    }
    
  4. Creare un controller REST
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class MyController {
        @GetMapping("/")
        public String home() {
            return "Hello, Spring Boot!";
        }
    }
    
2.7 Metodo di distribuzione Spring Boot
  • Confezionato come JAR: L'applicazione Spring Boot può essere inserita in un file JAR eseguibile tramitejava -jarIl comando viene eseguito.
  • Distribuzione containerizzata: Le applicazioni Spring Boot sono particolarmente adatte per le tecnologie di containerizzazione come Docker e sono facili da distribuire in ambienti cloud.
2.8 La relazione tra Spring Boot e Spring Framework

Spring Boot non è un sostituto di Spring Framework, ma un metodo di sviluppo rapido basato su Spring Framework. Fornisce un modo rapido per avviare le applicazioni Spring mantenendo tutte le funzionalità e la flessibilità di Spring Framework.

2.9 Perché scegliere Spring Boot?
  • sviluppo rapido: La configurazione automatica e la configurazione semplificata di Spring Boot rendono lo sviluppo più veloce.
  • Facile da implementare: Il server HTTP incorporato e il supporto della containerizzazione semplificano la distribuzione.
  • sostegno della comunità: la community Spring Boot offre numerose risorse, plug-in e procedure consigliate.
2.10 Conclusione

Spring Boot è un framework progettato per il moderno sviluppo Java. Semplifica la configurazione e fornisce una serie di funzioni pronte all'uso, consentendo agli sviluppatori di concentrarsi sull'implementazione della logica di business piuttosto che sulla costruzione dell'infrastruttura. Nei capitoli seguenti approfondiremo l'applicazione di Spring Boot nelle attività pianificate e mostreremo come utilizzare le sue funzionalità per creare attività automatizzate efficienti e affidabili.

Parte 3: Concetti di base sulle attività pianificate

3.1 Definizione delle attività pianificate

Un'attività pianificata è una parte di codice o programma che viene eseguita automaticamente a un orario prestabilito. Possono essere una tantum o periodici e vengono utilizzati per eseguire attività automatizzate come il backup dei dati, l'invio di notifiche, l'esecuzione di controlli pianificati, ecc.

3.2 Tipi di attività pianificate
  • compito una tantum: eseguito solo una volta, in genere per operazioni di inizializzazione o pulizia specifiche.
  • compiti periodici: eseguito ripetutamente in un determinato intervallo di tempo, che può essere un intervallo fisso o un orario basato sul calendario.
3.3 Scenari applicativi delle attività pianificate
  • backup dei dati: eseguire regolarmente il backup del database per garantire la sicurezza dei dati.
  • Generazione di rapporti: Genera regolarmente report aziendali per aiutare nel processo decisionale.
  • Monitoraggio del sistema: controlla periodicamente lo stato del sistema per scoprire e risolvere i problemi in modo tempestivo.
  • Notifica all'utente: invia promemoria o notifiche in base al comportamento dell'utente o a eventi specifici.
3.4 L'importanza delle attività pianificate

Le attività pianificate sono fondamentali per mantenere il sistema attivo e funzionante e automatizzare i processi aziendali. Possono ridurre l’intervento manuale, aumentare l’efficienza e garantire la tempestività e l’accuratezza delle attività.

3.5 Sfide nell'implementazione delle attività pianificate
  • precisione del tempo: garantire che le attività vengano eseguite accuratamente all'orario pianificato.
  • Gestione degli errori: gestire correttamente gli errori che possono verificarsi durante l'esecuzione.
  • Gestione delle risorse: allocare ragionevolmente le risorse per evitare impatti sulle prestazioni del sistema durante l'esecuzione dell'attività.
3.6 Come implementare le attività pianificate
  • livello del sistema operativo: utilizza crontab o l'Utilità di pianificazione di Windows.
  • livello del linguaggio di programmazione: utilizza una libreria o un framework specifico per la lingua, come Javajava.util.Timer
  • Livello del quadro applicativo: utilizza il supporto delle attività pianificate fornito dal framework, come Spring@Scheduled
3.7 Esempio: utilizzo di Javajava.util.TimerImplementare le attività pianificate

Ecco un esempio che utilizza la libreria standard JavaTimerEsempio di una semplice attività pianificata implementata dalla classe:

import java.util.Timer;
import java.util.TimerTask;

public class SimpleTimerTask {
    public static void main(String[] args) {
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行定时任务:"   System.currentTimeMillis());
            }
        };
        Timer timer = new Timer();
        long delay = 0;
        long intervalPeriod = 1000; // 间隔1秒执行一次
        timer.scheduleAtFixedRate(task, delay, intervalPeriod);
    }
}
3.8 Esempio: utilizzo delle espressioni cron

Le espressioni cron sono un modo potente per configurare il tempo di esecuzione delle attività pianificate. Ecco un esempio di un'espressione cron che esegue un'attività ogni giorno all'una di notte:

0 0 1 * * ?
3.9 Attività pianificate in Spring Boot

Lo Spring Boot è passato@Scheduled Le annotazioni semplificano la configurazione e l'implementazione delle attività pianificate.Ecco un utilizzo@ScheduledEsempio di attività pianificata Spring Boot con annotazioni:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {
    
    @Scheduled(fixedRate = 5000) // 每5秒执行一次
    public void reportCurrentTime() {
        System.out.println("当前时间:"   System.currentTimeMillis());
    }
    
    @Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行
    public void scheduleTask() {
        System.out.println("执行定时任务:"   System.currentTimeMillis());
    }
}
3.10 Monitoraggio e gestione delle attività pianificate
  • registrazione: registra l'esecuzione delle attività per facilitare il rilevamento dei problemi e il monitoraggio delle prestazioni.
  • visita medica: controlla regolarmente lo stato di integrità delle attività pianificate per assicurarti che vengano eseguite normalmente.

Parte 4: implementazione delle attività di temporizzazione in Spring Boot

4.1 Utilizzo@Scheduledannotazione

@Scheduled Si tratta di un'annotazione fornita da Spring per semplificare l'implementazione delle attività pianificate. Ti consente di creare metodi eseguiti periodicamente attraverso una semplice configurazione di annotazioni.

4.2 @ScheduledConfigurazione dell'annotazione
  • fixedRate: specificare un intervallo di tempo fisso (in millisecondi) tra due esecuzioni di attività.
  • fixedDelay: specificare un intervallo di tempo fisso tra la fine dell'esecuzione dell'ultima attività e l'inizio dell'attività successiva.
  • initialDelay: Specificare il tempo di ritardo prima che l'attività venga eseguita per la prima volta.
  • cron: utilizza le espressioni cron per specificare la pianificazione dell'esecuzione delle attività.
4.3 Esempio: UtilizzofixedRate

L'esempio seguente mostra un metodo che viene eseguito ogni 5 secondi:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class FixedRateTask {

    @Scheduled(fixedRate = 5000)
    public void taskWithFixedRate() {
        System.out.println("任务执行:"   LocalDateTime.now());
    }
}
4.4 Esempio: UtilizzofixedDelay

L'esempio seguente mostra un metodo che viene eseguito 1 secondo dopo il termine dell'esecuzione dell'attività precedente:

@Scheduled(fixedDelay = 1000)
public void taskWithFixedDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.5 Esempio: utilizzoinitialDelay

L'esempio seguente mostra un metodo che viene eseguito i primi 10 secondi dopo l'avvio dell'applicazione e poi ogni 5 secondi:

@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.6 Utilizzo delle espressioni cron

Le espressioni cron forniscono impostazioni temporali più complesse, consentendo di specificare tempi di esecuzione specifici. L'esempio seguente mostra un metodo che viene eseguito ogni giorno all'una di notte:

@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.7 Gestione delle eccezioni di esecuzione delle attività

Le attività pianificate possono generare eccezioni, fornisce Spring@Asyncannotazione per eseguire attività in modo asincrono e utilizzare@ExceptionHandlerper gestire le eccezioni.

@Async
@Scheduled(cron = "0 0/30 * * * ?")
public void taskWithExceptionHandling() {
    if (Math.random()