Technologieaustausch

Geplante Aufgaben in Springboot schreiben

2024-07-08

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

Teil 1: Einführung

1.1 Die Bedeutung geplanter Aufgaben

In der modernen Softwareentwicklung sind geplante Aufgaben eine Schlüsselkomponente der Anwendungsautomatisierung und betrieblichen Effizienz. Ob Datensicherung, System-Health-Check, regelmäßige Berichterstellung oder automatisierte Prozesse, die durch Benutzeraktivitäten ausgelöst werden, geplante Aufgaben spielen eine unverzichtbare Rolle. Sie stellen die Kontinuität der Geschäftslogik und die Selbstwartungsfähigkeit des Systems sicher.

1.2 Anwendung geplanter Aufgaben in verschiedenen Bereichen
  • Enterprise Resource Planning (ERP)-System: Geplante Aufgaben können zum Erstellen von Finanzberichten, Bestandsaktualisierungen usw. verwendet werden.
  • Content-Management-System (CMS): Inhalte regelmäßig veröffentlichen, Cache leeren usw.
  • Kundenbeziehungsmanagementsystem (CRM).: Versenden Sie regelmäßig Marketing-E-Mails, Erinnerungen an Kunden usw.
  • Online-Werbeplattform: Werbestrategien regelmäßig anpassen, Werbedarstellung optimieren etc.
1.3 Herausforderungen bei der Umsetzung traditioneller geplanter Aufgaben

Im traditionellen Entwicklungsmodell erfordert die Implementierung geplanter Aufgaben häufig die Abhängigkeit von den geplanten Aufgaben des Betriebssystems (z. B. Crontab von Linux) oder das Schreiben komplexer Geschäftslogik. Diese Methoden haben viele Nachteile:

  • Komplexe Konfiguration: Erfordert umfassende Kenntnisse des Taskplaners des Betriebssystems.
  • Schwierig zu pflegen: Aufgaben sind auf verschiedene Systeme und Anwendungen verteilt, sodass es schwierig ist, sie einheitlich zu verwalten und zu überwachen.
  • Schlechte Skalierbarkeit: Wenn Ihr Unternehmen wächst, wird das Hinzufügen oder Ändern von Aufgaben komplex und zeitaufwändig.
1.4 Spring Boot-Lösung

Als beliebtes Java-Framework bietet Spring Boot eine elegantere und integriertere Möglichkeit, geplante Aufgaben zu implementieren. Es vereinfacht die Konfiguration und bietet umfangreiche APIs, sodass Entwickler geplante Aufgabenfunktionen schnell in Anwendungen integrieren können.

1.5 Spring Boot-Unterstützung für geplante Aufgaben

Spring Boot bestanden@EnableSchedulingUnd@Scheduled Anmerkungen machen es extrem einfach, geplante Aufgaben in Spring-Anwendungen zu schreiben und zu konfigurieren. Darüber hinaus bietet Spring Boot auch eine Integration mit Spring Task Scheduler, der Unterstützung für erweiterte Anforderungen an geplante Aufgaben bietet.

1.6 Warum Spring Boot wählen, um geplante Aufgaben zu implementieren?
  • Vereinfachen Sie die Konfiguration: Geplante Aufgaben können durch Anmerkungen und ein wenig Konfiguration implementiert werden.
  • Einfach zu integrieren: Durch die nahtlose Integration in das Spring-Ökosystem können Sie andere Spring-Funktionen wie Transaktionsverwaltung, Abhängigkeitsinjektion usw. nutzen.
  • Starke Community-Unterstützung: Spring Boot verfügt über eine große Entwickler-Community, die viele Ressourcen und Best Practices bereitstellt.
  • Einfach zu testen: Die geplanten Aufgaben von Spring Boot erleichtern die Durchführung von Unit-Tests und Integrationstests.

Teil 2: Einführung in Spring Boot

2.1 Spring Boot-Übersicht

Spring Boot wurde vom Pivotal-Team (jetzt Teil von VMware) entwickelt und ist ein modulares, schnelles Entwicklungs- und Bereitstellungs-Framework, das auf dem Spring-Framework basiert. Ziel ist es, den anfänglichen Einrichtungs- und Entwicklungsprozess von Spring-Anwendungen zu vereinfachen und den Konfigurationsaufwand für Entwickler durch die Bereitstellung einer Reihe von Standardkonfigurationen zu reduzieren.

2.2 Kernfunktionen von Spring Boot
  • automatische Konfiguration: Spring Boot kann Spring-Anwendungen automatisch basierend auf Abhängigkeiten im Projekt konfigurieren.
  • Unabhängig agieren: Spring Boot-Anwendungen umfassen integrierte HTTP-Server (wie Tomcat, Jetty oder Undertow) und müssen nicht auf externen Servern bereitgestellt werden.
  • Keine XML-Konfiguration erforderlich: Spring Boot erfordert keine Verwendung von XML-Konfigurationsdateien, unterstützt jedoch weiterhin die XML-Konfiguration.
  • Microservice-Unterstützung: Spring Boot eignet sich sehr gut für Microservice-Architekturen und ist einfach zu erstellen, bereitzustellen und zu erweitern.
2.3 Spring Boot-Startmechanismus

Die Spring Boot-Anwendung wird durch gestartetSpringApplication.run() Durch die Implementierung der Methode wird der Spring-Anwendungskontext automatisch erstellt und konfiguriert. Spring Boot bietet außerdem eine Befehlszeilenschnittstelle (CLI) und einen Actuator-Endpunkt zur Überwachung und Verwaltung von Anwendungen.

2.4 Spring Boot-Abhängigkeitsverwaltung

Spring Boot bestandenspring-boot-starter-parent Bietet Abhängigkeitsmanagement und vereinfacht die Konfiguration von Maven- und Gradle-Projekten. Es definiert Versionsnummern und Abhängigkeitsbereiche vor und erleichtert so die Verwaltung von Abhängigkeitskonflikten und der Versionskontrolle.

2.5 Community und Plug-in-Ökologie von Spring Boot

Spring Boot verfügt über eine aktive Open-Source-Community, die eine große Anzahl von Plugins und „Startern“ bereitstellt, die die Abhängigkeiten enthalten, die zum Erstellen spezifischer Funktionen erforderlich sind, zspring-boot-starter-webZum Erstellen von RESTful-Anwendungen.

2.6 Beispiel: Erstellen Sie eine einfache Spring Boot-Anwendung

Nachfolgend finden Sie die Schritte zum Erstellen einer einfachen Spring Boot-Anwendung und den entsprechenden Beispielcode:

  1. Projektstruktur erstellen: Verwenden Sie Spring Initializr (https://start.spring.io/), um schnell eine Projektstruktur zu generieren.
  2. Abhängigkeiten hinzufügen: Wählen Sie z. B. die gewünschten Starter ausspring-boot-starter-web
  3. Schreiben Sie die Hauptanwendungsklasse
    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. Erstellen Sie einen REST-Controller
    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 Spring Boot-Bereitstellungsmethode
  • Verpackt als JAR: Spring Boot-Anwendungen können über in eine ausführbare JAR-Datei gepackt werdenjava -jarDer Befehl wird ausgeführt.
  • Containerisierte Bereitstellung: Spring Boot-Anwendungen eignen sich gut für Containerisierungstechnologien wie Docker und lassen sich einfach in Cloud-Umgebungen bereitstellen.
2.8 Die Beziehung zwischen Spring Boot und Spring Framework

Spring Boot ist kein Ersatz für Spring Framework, sondern eine schnelle Entwicklungsmethode basierend auf Spring Framework. Es bietet eine schnelle Möglichkeit, Spring-Anwendungen zu starten und gleichzeitig alle Funktionen und die Flexibilität des Spring Frameworks beizubehalten.

2.9 Warum Spring Boot wählen?
  • schnelle Entwicklung: Die automatische Konfiguration und die vereinfachte Konfiguration von Spring Boot beschleunigen die Entwicklung.
  • Einfach zu implementieren: Eingebetteter HTTP-Server und Containerisierungsunterstützung machen die Bereitstellung einfach.
  • gemeinschaftliche Unterstützung: Die Spring Boot-Community bietet eine Fülle von Ressourcen, Plug-Ins und Best Practices.
2.10 Fazit

Spring Boot ist ein Framework für die moderne Java-Entwicklung. Es vereinfacht die Konfiguration und bietet eine Reihe sofort einsatzbereiter Funktionen, sodass sich Entwickler auf die Implementierung der Geschäftslogik statt auf den Aufbau der Infrastruktur konzentrieren können. In den folgenden Kapiteln werden wir uns mit der Anwendung von Spring Boot in geplanten Aufgaben befassen und zeigen, wie man seine Funktionen nutzt, um effiziente und zuverlässige automatisierte Aufgaben zu erstellen.

Teil 3: Grundkonzepte geplanter Aufgaben

3.1 Definition geplanter Aufgaben

Eine geplante Aufgabe ist ein Code- oder Programmabschnitt, der zu einem vorgegebenen Zeitpunkt automatisch ausgeführt wird. Sie können einmalig oder periodisch sein und werden zur Durchführung automatisierter Aufgaben wie Datensicherung, Versenden von Benachrichtigungen, Durchführung geplanter Prüfungen usw. verwendet.

3.2 Arten geplanter Aufgaben
  • einmalige Aufgaben: Wird nur einmal ausgeführt, normalerweise für bestimmte Initialisierungs- oder Bereinigungsvorgänge.
  • periodische Aufgaben: Wird in einem bestimmten Zeitintervall wiederholt ausgeführt. Dabei kann es sich um ein festes Intervall oder eine kalenderbasierte Zeit handeln.
3.3 Anwendungsszenarien geplanter Aufgaben
  • Datensicherung: Sichern Sie die Datenbank regelmäßig, um die Datensicherheit zu gewährleisten.
  • Berichterstellung: Erstellen Sie regelmäßig Geschäftsberichte, um bei der Entscheidungsfindung zu helfen.
  • Systemüberwachung: Überprüfen Sie regelmäßig den Systemstatus, um Probleme rechtzeitig zu erkennen und zu lösen.
  • Benutzerbenachrichtigung: Senden Sie Erinnerungen oder Benachrichtigungen basierend auf dem Benutzerverhalten oder bestimmten Ereignissen.
3.4 Die Bedeutung geplanter Aufgaben

Geplante Aufgaben sind von entscheidender Bedeutung, um den Betrieb Ihres Systems aufrechtzuerhalten und Geschäftsprozesse zu automatisieren. Sie können manuelle Eingriffe reduzieren, die Effizienz steigern und die Pünktlichkeit und Genauigkeit von Aufgaben sicherstellen.

3.5 Herausforderungen bei der Umsetzung geplanter Aufgaben
  • Zeitgenauigkeit: Stellen Sie sicher, dass Aufgaben genau zum geplanten Zeitpunkt ausgeführt werden.
  • Fehlerbehandlung: Fehler, die während der Ausführung auftreten können, ordnungsgemäß behandeln.
  • Resourcenmanagement: Weisen Sie Ressourcen angemessen zu, um Auswirkungen auf die Systemleistung während der Aufgabenausführung zu vermeiden.
3.6 So implementieren Sie geplante Aufgaben
  • Betriebssystemebene: Verwenden Sie Crontab oder den Windows-Taskplaner.
  • Programmiersprachenniveau: Verwenden Sie eine sprachspezifische Bibliothek oder ein sprachspezifisches Framework, z. B. Javajava.util.Timer
  • Ebene des Anwendungsframeworks: Verwenden Sie die vom Framework bereitgestellte Unterstützung für geplante Aufgaben, z. B. Spring@Scheduled
3.7 Beispiel: Verwendung von Javajava.util.TimerImplementieren Sie geplante Aufgaben

Hier ist ein Beispiel für die Verwendung der Java-StandardbibliothekTimerBeispiel einer einfachen geplanten Aufgabe, die von einer Klasse implementiert wird:

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 Beispiel: Verwendung von Cron-Ausdrücken

Cron-Ausdrücke sind eine leistungsstarke Möglichkeit, die Ausführungszeit geplanter Aufgaben zu konfigurieren. Das Folgende ist ein Beispiel für einen Cron-Ausdruck, um jeden Tag um 1 Uhr morgens eine Aufgabe auszuführen:

0 0 1 * * ?
3.9 Geplante Aufgaben in Spring Boot

Spring Boot bestanden@Scheduled Anmerkungen vereinfachen die Konfiguration und Implementierung geplanter Aufgaben.Hier ist eine Verwendung@ScheduledBeispiel für eine kommentierte geplante Spring Boot-Aufgabe:

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 Überwachung und Verwaltung geplanter Aufgaben
  • Protokollierung: Zeichnen Sie die Ausführung von Aufgaben auf, um die Problemverfolgung und Leistungsüberwachung zu erleichtern.
  • Gesundheitsuntersuchung: Überprüfen Sie regelmäßig den Gesundheitszustand geplanter Aufgaben, um sicherzustellen, dass sie normal ausgeführt werden.

Teil 4: Implementierung von Timing-Aufgaben in Spring Boot

4.1 Nutzung@ScheduledAnmerkung

@Scheduled Es handelt sich um eine von Spring bereitgestellte Annotation, um die Implementierung geplanter Aufgaben zu vereinfachen. Sie können durch einfache Annotationskonfiguration regelmäßig ausgeführte Methoden erstellen.

4.2 @ScheduledAnmerkungskonfiguration
  • fixedRate: Geben Sie das feste Zeitintervall (in Millisekunden) zwischen zwei Aufgabenausführungen an.
  • fixedDelay: Geben Sie ein festes Zeitintervall zwischen dem Ende der letzten Aufgabenausführung und dem Start der nächsten Aufgabe an.
  • initialDelay: Geben Sie die Verzögerungszeit an, bevor die Aufgabe zum ersten Mal ausgeführt wird.
  • cron: Verwenden Sie Cron-Ausdrücke, um den Zeitplan für die Aufgabenausführung anzugeben.
4.3 Beispiel: VerwendungfixedRate

Das folgende Beispiel zeigt eine Methode, die alle 5 Sekunden ausgeführt wird:

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 Beispiel: VerwendungfixedDelay

Das folgende Beispiel zeigt eine Methode, die 1 Sekunde nach Abschluss der Ausführung der vorherigen Aufgabe ausgeführt wird:

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

Das folgende Beispiel zeigt eine Methode, die zuerst 10 Sekunden nach dem Start der Anwendung und dann alle 5 Sekunden ausgeführt wird:

@Scheduled(initialDelay = 10000, fixedRate = 5000)
public void taskWithInitialDelay() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.6 Verwendung von Cron-Ausdrücken

Cron-Ausdrücke bieten komplexere Zeiteinstellungen, sodass Sie bestimmte Ausführungszeiten angeben können. Das folgende Beispiel zeigt eine Methode, die jeden Tag um 1 Uhr morgens ausgeführt wird:

@Scheduled(cron = "0 0 1 * * ?")
public void taskWithCronExpression() {
    System.out.println("任务执行:"   LocalDateTime.now());
}
4.7 Behandlung von Ausnahmen bei der Aufgabenausführung

Geplante Aufgaben können Ausnahmen auslösen, so Spring@AsyncAnnotation, um Aufgaben asynchron auszuführen und zu verwenden@ExceptionHandlerum Ausnahmen zu behandeln.

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