Maison > Java > javaDidacticiel > le corps du texte

Introduction à CommandLineRunner et ApplicationRunner

不言
Libérer: 2019-03-22 10:09:26
avant
9787 Les gens l'ont consulté

Le contenu de cet article est une introduction à CommandLineRunner et ApplicationRunner. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

CommandLineRunner et ApplicationRunner sont des interfaces fournies par Spring Boot. Elles ont toutes deux une méthode run(). Tous les beans qui les implémentent seront automatiquement appelés après le démarrage du service Spring Boot.

Grâce à cette fonctionnalité, ils constituent un endroit idéal pour effectuer un travail d'initialisation ou écrire du code de test.

CommandLineRunner

Utiliser l'application pour implémenter

Après avoir créé un nouveau projet, pour plus de simplicité, nous utilisons directement la classe Application pour implémenter l'interface CommandLineRunner Annotations pour cette classe @SpringBootApplication la configurera automatiquement pour nous.

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>Ensuite, nous démarrons directement le service, vérifions le journal comme suit et constatons que la méthode run() est exécutée normalement : </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。
Copier après la connexion

Passage de paramètres

run() a un paramètre variable args, qui est utilisé pour recevoir les paramètres de ligne de commande. Ajoutons des paramètres à tester :


Introduction à CommandLineRunner et ApplicationRunner

Redémarrez ensuite le service en observant. le log, vous pouvez voir que les paramètres sont reçus normalement :

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
Copier après la connexion

Passage des paramètres de ligne de commande

Nous avons parlé d'un des avantages majeurs de l'utilisation de Spring Démarrer avant Autrement dit, le projet peut être empaqueté directement dans un package jar sans le déployer séparément. Après l'empaquetage dans un package jar, vous pouvez directement exécuter le package jar pour démarrer le service. De cette façon, lors de l'exécution du package jar, nous pouvons transmettre les paramètres de ligne de commande et laisser CommandLineRunner recevoir les paramètres.

Ce scénario est particulièrement courant sur les serveurs. Par exemple, si nous voulons effectuer une opération sans l'exposer au monde extérieur, nous pouvons utiliser CommandLineRunner comme point d'entrée pour l'opération.

Nous allons maintenant créer un package jar à démontrer.

    Entrez dans l'interface du terminal et démarrez l'emballage

Introduction à CommandLineRunner et ApplicationRunner

    Une fois l'emballage terminé, exécutez le package du pot. installez d'abord le service IDE arrêté.

Introduction à CommandLineRunner et ApplicationRunner

Vous pouvez voir sur le journal que nous avons également obtenu les paramètres normalement. En passant des paramètres, nous pouvons effectuer différentes opérations basées sur différents paramètres de la logique métier.

Ce que nous avons mentionné ci-dessus n'est qu'un seul CommandLineRunner. Et si nous avons plusieurs CommandLineRunner ? Comment contrôler l’ordre dans lequel ils sont exécutés ?

Nous allons maintenant vous présenter comment spécifier l'ordre d'exécution.

Spécifier l'ordre d'exécution

Spring Boot nous fournit une annotation "@Order", qui peut être utilisée pour spécifier l'ordre d'exécution. Par exemple, il y a trois CommandLineRunners dans notre projet. :

@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...");
    }
    
}
Copier après la connexion
Nous pouvons ajouter l'annotation @Order directement à cette classe, puis Spring Boot l'exécutera dans l'ordre spécifié par notre annotation, de petit à grand. Assez simple, n'est-ce pas ?

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...
Copier après la connexion
ApplicationRunner

ApplicationRunner fait la même chose que CommandLineRunner. Sa méthode run() sera automatiquement appelée après le démarrage du service. La seule différence est qu'ApplicationRunner encapsulera la commande. Les paramètres de ligne peuvent facilement obtenir des paramètres de ligne de commande et des valeurs de paramètres.

@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"));
    }
}
Copier après la connexion
Résultat de l'exécution :


Introduction à CommandLineRunner et ApplicationRunner

Nous pouvons constater que la ligne de commande peut être facilement obtenue via le paramètre ApplicationArguments de run() méthode La valeur du paramètre.

Donc, si votre projet doit obtenir des paramètres de ligne de commande, il est recommandé d'utiliser ApplicationRunner.

Résumé

Qu'il s'agisse de CommandLineRunner ou d'ApplicationRunner, leur but est d'effectuer certaines opérations après le démarrage du service. Si vous devez obtenir des paramètres de ligne de commande, il est recommandé d'utiliser ApplicationRunner.

Un autre scénario est que nous devons effectuer une opération sur le serveur, telle que modifier les données utilisateur de la base de données, mais que nous ne trouvons pas d'entrée d'exécution appropriée, alors c'est leur scénario d'utilisation idéal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal