Heim  >  Artikel  >  Java  >  Einführung in CommandLineRunner und ApplicationRunner

Einführung in CommandLineRunner und ApplicationRunner

不言
不言nach vorne
2019-03-22 10:09:269796Durchsuche

Der Inhalt dieses Artikels ist eine Einführung in CommandLineRunner und ApplicationRunner. Ich hoffe, dass er für Freunde hilfreich ist.

CommandLineRunner und ApplicationRunner sind Schnittstellen, die von Spring Boot bereitgestellt werden. Beide verfügen über eine run()-Methode. Alle Beans, die sie implementieren, werden automatisch aufgerufen, nachdem der Spring Boot-Dienst gestartet wurde.

Aufgrund dieser Funktion sind sie ein idealer Ort, um Initialisierungsarbeiten durchzuführen oder Testcode zu schreiben.

CommandLineRunner

Anwendung zum Implementieren verwenden

Nachdem wir ein neues Projekt erstellt haben, verwenden wir der Einfachheit halber direkt die Application-Klasse, um die CommandLineRunner-Schnittstelle zu implementieren . Anmerkungen für diese Klasse @SpringBootApplication konfiguriert sie automatisch für uns.

package cn.examplecode.sb2runner;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Sb2runnerApplication implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(Sb2runnerApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(Sb2runnerApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info("服务已启动,执行command line runner。");

        for (int i = 0; i <p>Als nächstes starten wir den Dienst direkt, überprüfen das Protokoll wie folgt und stellen fest, dass die run()-Methode normal ausgeführt wird: </p><pre class="brush:php;toolbar:false">Tomcat started on port(s): 8080 (http) with context path ''
Started Sb2runnerApplication in 2.204 seconds (JVM running for 3.161)
服务已启动,执行command line runner。

Parameterübergabe

The run( )-Methode verfügt über variable Parameterargumente. Dieser Parameter wird zum Empfangen von Befehlszeilenparametern verwendet. Fügen wir Parameter zum Testen hinzu:

Einführung in CommandLineRunner und ApplicationRunner

Starten Sie dann den Dienst neu und beobachten Sie das Protokoll. Sie können sehen, dass die Parameter normal empfangen werden:

Tomcat started on port(s): 8080 (http) with context path ''
Started Sb2runnerApplication in 1.888 seconds (JVM running for 2.41)
服务已启动,执行command line runner。
args[0]: --param=sth

Befehlszeilenparameterübertragung

Wir haben zuvor gesagt, dass ein großer Vorteil der Verwendung von Spring Boot darin besteht, dass das Projekt sein kann direkt in ein JAR-Paket verpackt, ohne dass es separat bereitgestellt werden muss. Nach dem Packen in ein JAR-Paket können Sie das JAR-Paket direkt ausführen, um den Dienst zu starten. Auf diese Weise können wir beim Ausführen des JAR-Pakets die Befehlszeilenparameter übergeben und CommandLineRunner die Parameter empfangen lassen.

Dieses Szenario tritt besonders häufig auf Servern auf. Wenn wir beispielsweise eine Operation ausführen möchten, ohne sie der Außenwelt zugänglich zu machen, können wir CommandLineRunner als Einstiegspunkt für die Operation verwenden.

Jetzt erstellen wir zur Demonstration ein Glaspaket.

  1. Betreten Sie die Terminalschnittstelle und starten Sie das Verpacken

Einführung in CommandLineRunner und ApplicationRunner

  1. Nachdem das Verpacken abgeschlossen ist, führen Sie das JAR-Paket aus Installieren Sie zunächst den IDE-Dienst.

Einführung in CommandLineRunner und ApplicationRunner

Sie können dem Protokoll entnehmen, dass wir die Parameter auch normal erhalten haben. Durch die Übergabe von Parametern können wir verschiedene Vorgänge basierend auf unterschiedlichen Parametern in der Geschäftslogik ausführen.

Was wir oben erwähnt haben, ist nur ein CommandLineRunner. Was ist, wenn wir mehrere CommandLineRunner haben? Wie kontrolliere ich die Reihenfolge, in der sie ausgeführt werden?

Jetzt stellen wir vor, wie die Ausführungsreihenfolge festgelegt wird.

Geben Sie die Ausführungsreihenfolge an

Spring Boot stellt uns eine Anmerkung „@Order“ zur Verfügung, mit der Sie die Ausführungsreihenfolge angeben können. In unserem Projekt gibt es beispielsweise drei CommandLineRunner :

@Component
@Order(1)
public class CommandRunner1 implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(CommandRunner1.class);

    @Override
    public void run(String... args) throws Exception {
        logger.info("执行第一个command line runner...");
    }

}


@Component
@Order(2)
public class CommandRunner2 implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(CommandRunner2.class);

    @Override
    public void run(String... args) throws Exception {
        logger.info("执行第二个command line runner...");
    }
    
}

@Component
@Order(3)
public class CommandRunner3 implements CommandLineRunner {

    private static Logger logger = LoggerFactory.getLogger(CommandRunner3.class);

    @Override
    public void run(String... args) throws Exception {
        logger.info("执行第三个command line runner...");
    }
    
}

Wir können die Annotation @Order direkt zu dieser Klasse hinzufügen, und Spring Boot führt sie dann in der durch unsere Annotation angegebenen Reihenfolge von klein nach groß aus. Ziemlich einfach, nicht wahr?

Tomcat started on port(s): 8080 (http) with context path ''
Started Sb2runnerApplication in 1.764 seconds (JVM running for 2.292)
执行第一个command line runner...
执行第二个command line runner...
执行第三个command line runner...

ApplicationRunner

ApplicationRunner macht das Gleiche wie CommandLineRunner. Seine run()-Methode wird automatisch aufgerufen, nachdem der Dienst gestartet wurde. Der einzige Unterschied besteht darin, dass ApplicationRunner die Befehlszeilenparameter kapselt. können Sie problemlos Befehlszeilenparameter und Parameterwerte abrufen.

@Component
public class ApplicationRunner1 implements ApplicationRunner {

    private static Logger logger = LoggerFactory.getLogger(ApplicationRunner1.class);

    @Override
    public void run(ApplicationArguments args) throws Exception {
        logger.info("执行application runner...");
        logger.info("获取到参数: " + args.getOptionValues("param"));
    }
}

Ausführungsergebnis:

Einführung in CommandLineRunner und ApplicationRunner

Wir können feststellen, dass die Befehlszeilenparameter einfach über den Parameter ApplicationArguments der run()-Methode abgerufen werden können . Wert.

Wenn Ihr Projekt also Befehlszeilenparameter abrufen muss, wird die Verwendung von ApplicationRunner empfohlen.

Zusammenfassung

Ob CommandLineRunner oder ApplicationRunner, ihr Zweck besteht darin, einige Vorgänge nach dem Start des Dienstes auszuführen. Wenn Sie Befehlszeilenparameter abrufen müssen, wird die Verwendung von ApplicationRunner empfohlen.

Ein anderes Szenario besteht darin, dass wir einen Vorgang auf dem Server ausführen müssen, z. B. das Ändern von Datenbankbenutzerdaten, aber keinen geeigneten Ausführungseintrag finden können. Dies ist ihr ideales Verwendungsszenario.

Das obige ist der detaillierte Inhalt vonEinführung in CommandLineRunner und ApplicationRunner. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen