Spring Boot Runner: Übersicht und Einsatzmöglichkeiten

tiny-tool.de

tiny-tool.de

Spring Boot hat sich zu einem der beliebtesten Frameworks in der Java-Welt entwickelt. Es vereinfacht nicht nur die Konfiguration und den Start von Anwendungen, sondern bietet auch verschiedene Mechanismen, um Code beim Starten der Anwendung auszuführen. In diesem Artikel werfen wir einen detaillierten Blick auf zwei dieser Mechanismen: den CommandLineRunner und den ApplicationRunner. Beide bieten ähnliche Funktionen, aber mit kleinen, feinen Unterschieden, die je nach Anwendungsfall von Bedeutung sein können.

1. Was ist ein Spring Boot Runner?

Ein Runner in Spring Boot ist ein spezieller Mechanismus, der es ermöglicht, benutzerdefinierten Code auszuführen, sobald der Spring-Anwendungskontext vollständig geladen ist, aber noch bevor die Anwendung tatsächlich für Anfragen bereit ist. Dies gibt Entwicklern die Möglichkeit, wichtige Aufgaben wie die Initialisierung von Daten, das Ausführen von Skripten oder die Konfiguration von Anwendungen zur Laufzeit direkt beim Start der Anwendung zu implementieren.

Wie funktioniert das?

In Spring Boot gibt es zwei zentrale Schnittstellen, die verwendet werden können, um diese Art von Code zu implementieren: CommandLineRunner und ApplicationRunner. Beide Schnittstellen dienen demselben Zweck, unterscheiden sich jedoch geringfügig in ihrer Funktionsweise und dem Umgang mit den Startparametern der Anwendung.

2. CommandLineRunner

Der CommandLineRunner ist eine Schnittstelle, die es dir erlaubt, Code auszuführen, indem du die Methode run(String... args) implementierst. Die Methode wird mit den Argumenten aufgerufen, die der Anwendung beim Start übergeben wurden.

Beispiel

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class MyCommandLineRunner implements CommandLineRunner {

  @Override
  public void run(String… args) throws Exception {
    System.out.println(„Application started with CommandLineRunner“);
    for (String arg : args) {
      System.out.println(„Arg: „ + arg);
    }
    // Weitere Initialisierungsaufgaben hier
  }
}

In diesem Beispiel wird der MyCommandLineRunner beim Start der Anwendung ausgeführt, und die übergebenen Argumente werden in der Konsole ausgegeben.

3. ApplicationRunner

Der ApplicationRunner ist ähnlich wie der CommandLineRunner, bietet jedoch etwas mehr Struktur, indem er die Argumente in eine ApplicationArguments-Instanz kapselt. Diese Instanz bietet Methoden, um die Argumente einfacher zu verarbeiten, z.B. um zwischen Optionen und non-option-Argumenten zu unterscheiden.

Beispiel

import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.ApplicationArguments;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationRunner implements ApplicationRunner {

  @Override
  public void run(ApplicationArguments args) throws Exception {
    System.out.println(„Application started with ApplicationRunner“);
    boolean debug = args.containsOption(„debug“);
    System.out.println(„Debug mode: „ + debug);

    for (String name : args.getNonOptionArgs()) {
      System.out.println(„Non-option arg: „ + name);
    }
    // Weitere Initialisierungsaufgaben hier
  }
}

Hier sieht man, dass der ApplicationRunner zusätzlich zu den einfachen Argumenten auch Optionen verarbeiten kann. Wenn die Anwendung mit dem Argument --debug gestartet wird, kann dies im Code erkannt und entsprechend gehandelt werden.

4. Welchen Runner sollte man verwenden?

Beide Runner haben ihre Vorzüge, aber die Wahl hängt von deinem spezifischen Anwendungsfall ab:

  • Einfachheit: Wenn du keine komplexe Argumentverarbeitung benötigst und einfach nur Code beim Start ausführen möchtest, reicht der CommandLineRunner aus.
  • Komplexität: Wenn du eine detailliertere Kontrolle über die übergebenen Argumente benötigst, ist der ApplicationRunner die bessere Wahl.