Wilkommen auf meinem Blog. Fast der gesamte Inhalt hier besteht aus Notizen, die ich mir selbst gemacht habe. Obwohl es für diese Inhalte keine spezielle Kategorie gibt, finden Sie hier hauptsächlich Rezensionen der Bücher, die ich gelesen habe, meine Softwarenotizen und gelegentlich auch andere Inhalte.
Um beim Start der Anwendung automatisch Testdaten in die Datenbank zu laden, kann man eine Methode mit der Annotation @EventListener(ApplicationStartedEvent.class) verwenden.
Diese Methode kann entweder:
in der Startklasse (z. B. Application.java) oder
in einer eigenen Config-Klasse
platziert werden – je nachdem, wie das Projekt aufgebaut ist.
Im folgenden Beispiel werden 100 Employee-Datensätze (von 0 bis 99) beim Programmstart generiert und in die Datenbank gespeichert.
@EventListener(ApplicationStartedEvent.class)
public void appStart() {
if (employeeRepository.count().block() == 0) {
// Wenn keine Daten in der DB vorhanden sind, wird dieser Code ausgeführt.
IntStream.range(0, 100)
// Erstellt 100 Einträge (0 bis 99)
.mapToObj(this::generate)
// Ruft die generate()-Methode für jeden Eintrag auf
.map(employeeRepository::save)
// Speichert jeden Datensatz als Mono<Employee>
.collect(Collectors.toList())
// Sammeln aller Monos in einer Liste
.forEach(item -> item.subscribe(
(data) -> System.out.println(data),
// Ausgabe des gespeicherten Datensatzes
(err) -> System.out.println(err)
// Ausgabe möglicher Fehler
));
}
}
private Employee generate(int i) {
// Diese Methode erzeugt für jeden Index einen neuen Employee-Datensatz.
return Employee.builder()
.name("Name" + i)
.lastname("Lastname" + i)
.birthday(LocalDate.now())
.build();
}
Kurze Zusammenfassung:
✔ Diese Methode läuft automatisch beim Programmstart. ✔ Sie prüft, ob die Datenbank leer ist. ✔ Wenn ja, werden 100 Employees erzeugt und gespeichert. ✔ Jeder Eintrag wird danach über subscribe() ausgegeben.