Spring Boot Event Timerhttps://www.std.ch/2500?&atomFri, 29 Mar 2024 06:59:15 +0000stack.ch
https://stack.ch/
db42258f-ed99-11ee-8c11-005056bb85fbSimtech AG - Blog - Spring Boot Blogs - Spring Boot Event Timer
https://www.std.ch/2500
db4226a1-ed99-11ee-8c11-005056bb85fbFri, 29 Mar 2024 06:59:15 +0000Spring Boot Event Timer
https://www.std.ch/2500
db422910-ed99-11ee-8c11-005056bb85fbFri, 29 Mar 2024 06:59:15 +0000
https://www.std.ch/2500
db422cb5-ed99-11ee-8c11-005056bb85fbFri, 29 Mar 2024 06:59:15 +0000In der Praxis werden je nach Anwendungsfall Arbeiten in synchrone und asynchrone Aufgaben unterteilt. Als Beispiel dient uns z.B. ein UI Formular, welches mit jedem erfolgreichen Request ein PDF Dokument zum Zweck der Nachverfolgbarkeit zu erstellen ist. Dieses PDF Dokument wird asynchron erstellt und damit vom synchronen Request entkoppelt.Die asynchrone Aufgabe wird z.B. über eine Datenbank Tabelle (e.g. «events») verwaltet. Der Scheduled Event Timer liest im Intervall nach gespeicherten Events in der Datenbank. Jedes Event wird je nach Typ via Application Event Publisher synchron ausgelöst.
https://www.std.ch/2500
db4236e0-ed99-11ee-8c11-005056bb85fbFri, 29 Mar 2024 06:59:15 +0000Das folgende Listing zeigt die Klasse Event Timer mit 3 statischen Member Klassen EventOne, EventTwo, EventThree:package ch.std.event.timer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class EventTimer {
Logger logger = LoggerFactory.getLogger(EventTimer.class);
private ApplicationEventPublisher applicationEventPublisher;
public EventTimer(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
}
@Scheduled(initialDelay = 5000, fixedRate = 2500)
public void runTimer() {
int randomNumber = this.getRandomNumber(1, 4);
switch (randomNumber) {
case 1:
logger.info("before publishEvent One");
this.applicationEventPublisher.publishEvent(new EventOne());
logger.info("after publishEvent One");
break;
case 2:
logger.info("before publishEvent Two");
this.applicationEventPublisher.publishEvent(new EventTwo());
logger.info("after publishEvent Two");
break;
case 3:
logger.info("before publishEvent Three");
this.applicationEventPublisher.publishEvent(new EventThree());
logger.info("after publishEvent Three");
break;
default:
break;
}
}
private int getRandomNumber(int min, int max) {
return (int) ((Math.random() * (max - min)) + min);
}
@Component
public static class EventOne {
Logger logger = LoggerFactory.getLogger(EventOne.class);
@EventListener
public void runEvent(EventOne eventOne) {
logger.info("runEvent()");
}
}
@Component
public static class EventTwo {
Logger logger = LoggerFactory.getLogger(EventTwo.class);
@EventListener
public void runEvent(EventTwo eventTwo) {
logger.info("runEvent()");
}
}
@Component
public static class EventThree {
Logger logger = LoggerFactory.getLogger(EventThree.class);
@EventListener
public void runEvent(EventThree eventThree) {
logger.info("runEvent()");
}
}
}Damit das Scheduling funktioniert muss solche via Application Klasse enabled werden:package ch.std.event.timer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class SpringbootEventTimerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootEventTimerApplication.class, args);
}
}Mit dem erfolgreichen Start der Anwendung wird der Event Timer aktiv:In der Praxis würde der Random Ansatz durch die Datenbank Query ersetzt.
https://www.std.ch/2500
db424800-ed99-11ee-8c11-005056bb85fbFri, 29 Mar 2024 06:59:15 +0000Das gesamte Beispiel finden Sie unter dem Link springbooteventtimer.zip.
https://www.std.ch/2500
db424ed3-ed99-11ee-8c11-005056bb85fbFri, 29 Mar 2024 06:59:15 +0000War dieser Blog für Sie wertvoll. Wir danken für jede Anregung und FeedbackÜber uns
https://www.std.ch/about
Fri, 29 Mar 2024 06:59:15 +0000db42527f-ed99-11ee-8c11-005056bb85fbAktuell
https://www.std.ch/
Fri, 29 Mar 2024 06:59:15 +0000db425325-ed99-11ee-8c11-005056bb85fbAGB
https://www.std.ch/agb
Fri, 29 Mar 2024 06:59:15 +0000db4254f7-ed99-11ee-8c11-005056bb85fbBildungswege
https://www.std.ch/bildungswege
Fri, 29 Mar 2024 06:59:15 +0000db4255b2-ed99-11ee-8c11-005056bb85fbBlog
https://www.std.ch/blog
Fri, 29 Mar 2024 06:59:15 +0000db42565c-ed99-11ee-8c11-005056bb85fbRufen Sie mich an
https://www.std.ch/callus
Fri, 29 Mar 2024 06:59:15 +0000db4256f8-ed99-11ee-8c11-005056bb85fbCharts
https://www.std.ch/charts
Fri, 29 Mar 2024 06:59:15 +0000db425900-ed99-11ee-8c11-005056bb85fbConsulting
https://www.std.ch/consulting
Fri, 29 Mar 2024 06:59:15 +0000db4259a5-ed99-11ee-8c11-005056bb85fbKontakt
https://www.std.ch/contact
Fri, 29 Mar 2024 06:59:15 +0000db425a7f-ed99-11ee-8c11-005056bb85fbAusbildung/Kurse
https://www.std.ch/education
Fri, 29 Mar 2024 06:59:15 +0000db425c8b-ed99-11ee-8c11-005056bb85fbSoftware Engineering
https://www.std.ch/engineering
Fri, 29 Mar 2024 06:59:15 +0000db425d28-ed99-11ee-8c11-005056bb85fbFreelancer
https://www.std.ch/freelancer
Fri, 29 Mar 2024 06:59:15 +0000db425dcb-ed99-11ee-8c11-005056bb85fbImpressum
https://www.std.ch/impressum
Fri, 29 Mar 2024 06:59:15 +0000db425fd6-ed99-11ee-8c11-005056bb85fbKursleiter
https://www.std.ch/kursleiter
Fri, 29 Mar 2024 06:59:15 +0000db426078-ed99-11ee-8c11-005056bb85fbNetzwerk
https://www.std.ch/network
Fri, 29 Mar 2024 06:59:15 +0000db42610b-ed99-11ee-8c11-005056bb85fbReferenzen
https://www.std.ch/references
Fri, 29 Mar 2024 06:59:15 +0000db4262e0-ed99-11ee-8c11-005056bb85fbSitemap
https://www.std.ch/sitemap
Fri, 29 Mar 2024 06:59:15 +0000db42638e-ed99-11ee-8c11-005056bb85fbTools
https://www.std.ch/tools
Fri, 29 Mar 2024 06:59:15 +0000db426432-ed99-11ee-8c11-005056bb85fbVision
https://www.std.ch/vision
Fri, 29 Mar 2024 06:59:15 +0000db4264c2-ed99-11ee-8c11-005056bb85fb