Neue Daten beim Programmstart automatisch in die Datenbank laden

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.