Spring Boot Event Timerhttps://www.cmseo.ch/Publisher?&atomThu, 28 Mar 2024 19:41:00 +0000stack.ch
https://stack.ch/
1a977505-ed3b-11ee-8c11-005056bb85fbSimtech AG - Blog - Spring Boot Blogs - Spring Boot Event Timer
https://www.cmseo.ch/Publisher
1a97760a-ed3b-11ee-8c11-005056bb85fbThu, 28 Mar 2024 19:41:00 +0000Spring Boot Event Timer
https://www.cmseo.ch/Publisher
1a977744-ed3b-11ee-8c11-005056bb85fbThu, 28 Mar 2024 19:41:00 +0000
https://www.cmseo.ch/Publisher
1a97784f-ed3b-11ee-8c11-005056bb85fbThu, 28 Mar 2024 19:41:00 +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.cmseo.ch/Publisher
1a977eba-ed3b-11ee-8c11-005056bb85fbThu, 28 Mar 2024 19:41:00 +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.cmseo.ch/Publisher
1a978c28-ed3b-11ee-8c11-005056bb85fbThu, 28 Mar 2024 19:41:00 +0000Das gesamte Beispiel finden Sie unter dem Link springbooteventtimer.zip.
https://www.cmseo.ch/Publisher
1a979412-ed3b-11ee-8c11-005056bb85fbThu, 28 Mar 2024 19:41:00 +0000War dieser Blog für Sie wertvoll. Wir danken für jede Anregung und FeedbackÜber uns
https://www.cmseo.ch/about
Thu, 28 Mar 2024 19:41:00 +00001a97966c-ed3b-11ee-8c11-005056bb85fbAktuell
https://www.cmseo.ch/
Thu, 28 Mar 2024 19:41:00 +00001a97970e-ed3b-11ee-8c11-005056bb85fbAGB
https://www.cmseo.ch/agb
Thu, 28 Mar 2024 19:41:00 +00001a9797a2-ed3b-11ee-8c11-005056bb85fbBildungswege
https://www.cmseo.ch/bildungswege
Thu, 28 Mar 2024 19:41:00 +00001a979837-ed3b-11ee-8c11-005056bb85fbBlog
https://www.cmseo.ch/blog
Thu, 28 Mar 2024 19:41:00 +00001a9798d6-ed3b-11ee-8c11-005056bb85fbRufen Sie mich an
https://www.cmseo.ch/callus
Thu, 28 Mar 2024 19:41:00 +00001a979973-ed3b-11ee-8c11-005056bb85fbCharts
https://www.cmseo.ch/charts
Thu, 28 Mar 2024 19:41:00 +00001a979a13-ed3b-11ee-8c11-005056bb85fbConsulting
https://www.cmseo.ch/consulting
Thu, 28 Mar 2024 19:41:00 +00001a979aaf-ed3b-11ee-8c11-005056bb85fbKontakt
https://www.cmseo.ch/contact
Thu, 28 Mar 2024 19:41:00 +00001a979b8c-ed3b-11ee-8c11-005056bb85fbAusbildung/Kurse
https://www.cmseo.ch/education
Thu, 28 Mar 2024 19:41:00 +00001a979c2b-ed3b-11ee-8c11-005056bb85fbSoftware Engineering
https://www.cmseo.ch/engineering
Thu, 28 Mar 2024 19:41:00 +00001a979cc5-ed3b-11ee-8c11-005056bb85fbFreelancer
https://www.cmseo.ch/freelancer
Thu, 28 Mar 2024 19:41:00 +00001a979d64-ed3b-11ee-8c11-005056bb85fbImpressum
https://www.cmseo.ch/impressum
Thu, 28 Mar 2024 19:41:00 +00001a979df8-ed3b-11ee-8c11-005056bb85fbKursleiter
https://www.cmseo.ch/kursleiter
Thu, 28 Mar 2024 19:41:00 +00001a979e88-ed3b-11ee-8c11-005056bb85fbNetzwerk
https://www.cmseo.ch/network
Thu, 28 Mar 2024 19:41:00 +00001a979f36-ed3b-11ee-8c11-005056bb85fbReferenzen
https://www.cmseo.ch/references
Thu, 28 Mar 2024 19:41:00 +00001a979fc6-ed3b-11ee-8c11-005056bb85fbSitemap
https://www.cmseo.ch/sitemap
Thu, 28 Mar 2024 19:41:00 +00001a97a056-ed3b-11ee-8c11-005056bb85fbTools
https://www.cmseo.ch/tools
Thu, 28 Mar 2024 19:41:00 +00001a97a0e3-ed3b-11ee-8c11-005056bb85fbVision
https://www.cmseo.ch/vision
Thu, 28 Mar 2024 19:41:00 +00001a97a174-ed3b-11ee-8c11-005056bb85fb