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?
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
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.
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);
}
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.
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.
import com.indusnode.quartz.annotation.Scheduled;
...
@Scheduled(interval="5", intervalType=Scheduled.IntervalType.SEC)
class TestJob implements Job {
//...
}
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.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