webentwicklung-frage-antwort-db.com.de

Was ist der beste Weg, um eine Aufgabe in Spring Boot-Anwendung zu planen

Ich entwickle derzeit eine Anwendung, die auf Spring-Boot basiert. 

Ich weiß, dass Anmerkungen wie @Scheduled Aufgaben planen können. Da Benutzer in meiner Anwendung E-Mails zu unterschiedlichen Zeiten senden und nur einmal senden möchten.

Ich habe bereits die Post Spring-Scheduling-Task gelesen - nur einmal ausführen , Es ist jedoch immer seltsam, dass ein localExecutor in einer Spring-basierten Anwendung "neu" ist.

Auf diese Weise muss ich, sobald ein Benutzer eine E-Mail verschickt hat, einen localExecutor für seine Aufgabe "neu" erstellen.

Gibt es bessere Wege?

17
Exia

sie sollten quartz-scheduler und send mails at different time and send only once.- als Geschäftslogik in Ihren Code einfügen Weitere Informationen zur Integration von Spring Boot-Quarz https://github.com/davidkiss/spring-boot-quartz-demo

9
Pankaj Pandey

Die einfachste Möglichkeit zum Planen von Aufgaben in Spring besteht darin, eine Methode zu erstellen, die von @Scheduled im verwalteten Frühlingsbean kommentiert wird. Außerdem ist @EnableScheduling in beliebigen @Configuration-Klassen erforderlich.

Spring Tutorial

Sie können crontab in @ Scheduled verwenden 

 private AtomicInteger counter = new AtomicInteger(0);

@Scheduled(cron = "*/2 * * * * *")
public void cronJob() {
    int jobId = counter.incrementAndGet();
    System.out.println("Job " + new Date() + ", jobId: " + jobId);
}
13
Satish Kr

Sie können Quartz Scheduler verwenden.

Quartz ist eine umfangreiche Open Source-Job-Scheduling-Bibliothek, die in nahezu jede Java-Anwendung integriert werden kann - von der kleinsten eigenständigen Anwendung bis zum größten E-Commerce-System. Mit Quartz lassen sich einfache oder komplexe Zeitpläne für die Ausführung von Dutzenden, Hunderten oder sogar Zehntausenden von Jobs erstellen. Jobs, deren Aufgaben als Standard-Java-Komponenten definiert sind, die praktisch alles ausführen können, für das Sie sie programmieren. Der Quartz Scheduler enthält viele Funktionen der Enterprise-Klasse, z. B. Unterstützung für JTA-Transaktionen und Clustering.

Sie finden hier einige Blogs, die veranschaulichen, wie Quarz im Springboot verwendet wird, einschließlich der Definition von JobDetail, Trigger, Fabriken usw., was wenig überwältigend und schwerfällig ist.

Es gibt einen einfachen Weg, das Gleiche zu tun.

Sie können versuchen, https://github.com/mejariamol/quartz-easy . Diese Bibliothek vereinfacht die Integration des Quarzplaners im Spring Boot Framework. Ich kam mir dabei vor, als ich in einem der Projekte Quarz-Scheduler aufbaute.

  1. Annotieren Sie Ihre Jobimplementierung mit Geplante Annotation mit der erforderlichen Konfiguration, indem Sie geeignete Felder in der Annotation festlegen.
import com.indusnode.quartz.annotation.Scheduled;
...
@Scheduled(interval="5", intervalType=Scheduled.IntervalType.SEC)
class TestJob implements Job {
    //...
}
  1. Legen Sie die Anwendungseigenschaft qe.base-package als Basispaketnamen des Projekts fest, das alle Ihre Jobimplementierungen enthält. Fügen Sie dem Komponentenscan auch com.indusnode als Wert zu basePackage hinzu.
  2. Und du bist fertig! Es müssen keine Fabriken, JobDetail, Trigger usw. definiert werden.

Um diese Bibliothek zu verwenden, fügen Sie das quartz-easy-Artefakt in den Abhängigkeitsbereich Ihres pom.xml ein.

<dependency>
  <groupId>com.indusnode</groupId>
  <artifactId>quartz-easy</artifactId>
  <version>1.0.0</version>
</dependency>

Weitere Informationen finden Sie unter https://search.maven.org/artifact/com.indusnode/quartz-easy/1.0.0/jar

0
Amol Mejari