Préface
Dans notre travail réel, nous rencontrons toujours une telle exigence. Lorsque le projet démarre, nous devons effectuer des opérations d'initialisation, comme l'initialisation du pool de threads, le chargement du certificat de chiffrement à l'avance, etc. Aujourd'hui, je vous présenterai un outil de démarrage Spring, qui est spécialement conçu pour vous aider à résoudre le fonctionnement des ressources d'initialisation du démarrage du projet.
Cet artefact est CommandLinerUnner. Le composant de l'interface CommandLinerUnner sera exécuté avant SpringApplication.Run () après que les SpringBeans soient initialisés, ce qui est très adapté à certains travaux d'initialisation des données au début du démarrage de l'application.
Ensuite, nous utiliserons les cas pour tester comment il est utilisé. Avant de tester, ajoutez deux lignes d'invites d'impression à la classe de démarrage pour nous faciliter pour identifier le synchronisation d'exécution de CommandLinerUnner.
@SpringBootApplicationPublic Class CommandLinerUnnerApplication {public static void main (String [] args) {System.out.println ("Le service à démarrer."); SpringApplication.Run (CommandLinerUnnerApplication.Class, Args); System.out.println ("Le service a commencé."); }}Ensuite, nous créons directement une classe qui hérite de CommandLinerUnner et implémente sa méthode run ().
@ComponentPublic Class Runner implémente CommandLinerUnner {@Override public void run (String ... args) lève exception {System.out.println ("Le coureur commence à initialiser ..."); }}Nous imprimons certains paramètres dans la méthode run () pour voir comment il s'exécute. Une fois terminé, démarrez le projet de test:
... le service à démarrer .____ __ _ /// / ___'_ __ _ (_) _ ____ _ / / / / / / () / ___ | '_ |' _ | / / / / / / / / / / / / / / / / / | | | | | | | | | | | | | | toujours (_ |)))) .__ || | _ | | _ | | _ | | _ / __, | / / / / / ===================================== ____ / = / _ / _ / :: Spring Boot :: (v2.0.0.release) .. 2018-04-21 22: 21: 34.706 Info 27016 --- [Main] osbwembedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2018-04-21 22:21:34.710 INFO 27016 --- [ main] com.neo.CommandLineRunnerApplication : Started CommandLineRunnerApplication in 3.796 seconds (JVM running for 5.128)The Runner start Pour initialiser ... le service a commencé.
Sur la base des informations d'impression de la console, nous pouvons voir que la méthode de CommandLinerUnner sera exécutée après le chargement du conteneur de démarrage Spring et que le projet sera démarré une fois l'exécution terminée.
Si nous devons initialiser de nombreuses ressources lors du démarrage du conteneur et que les ressources initiales sont commandées les unes avec les autres, comment pouvons-nous garantir l'ordre d'exécution de différents CommandLainerUnners? Spring Boot fournit également une solution. C'est-à-dire utiliser @order annotation.
Nous créons deux classes d'implémentation CommandLinerUnner à tester:
La première classe d'implémentation:
@ Component @ Order (1) Public Class OrderRunner1 implémente CommandLinerUnner {@Override public void run (String ... args) lève exception {System.out.println ("L'OrdreRunner1 commence à initialiser ..."); }}La deuxième classe d'implémentation:
@ Component @ Order (2) Public Class OrderRunner2 implémente CommandLinerUnner {@Override public void run (String ... args) lève exception {System.out.println ("L'OrdreRunner2 commence à initialiser ..."); }}Une fois l'ajout terminé, redémarrez et observez l'ordre d'exécution:
... le service à démarrer. ____ _ __ _ //// ___'_ __ _ (_) _ __ __ / / / / / (() / ___ | '_ |' _ | | / / // ___) | | | | | | | | | | | | | || (_ | |)))) '| ____ | .__ || | _ | | _ | | _ / __, | / / / / / =================================. Tomcat a commencé sur les ports (s): 8080 (HTTP) avec le chemin de contexte '' 2018-04-21 22: 21: 34.710 info 27016 --- [Main] com.neo.commandlinerunnerApplication: a démarré CommandLinerUnnerApplication en 3,796 secondes (JVM exécutant pour 5.128) L'Ordre. Pour initialiser ... le service a commencé.
Grâce à la sortie de la console, nous avons constaté que la classe d'implémentation qui ajoute l'annotation @Order est exécutée en premier, et plus la valeur dans @Order () est inférieure, plus il commence plus tôt.
En pratique, le même objectif peut être atteint en utilisant ApplicationRunner, et il y a peu de différence entre les deux.
Exemple de code: https://github.com/ityouknow/spring-cloud-examples (téléchargement local)
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.