Vorwort
In unserer tatsächlichen Arbeit begegnen wir immer auf eine solche Anforderung. Wenn das Projekt beginnt, müssen wir einige Initialisierungsvorgänge durchführen, z. B. die Initialisierung des Thread -Pools, das Laden des Verschlüsselungszertifikats im Voraus usw. Ich werde Ihnen heute ein Spring -Boot -Tool vorstellen, mit dem Sie den Initialisierungsressourcenbetrieb des Projektstarts lösen können.
Dieses Artefakt ist Commandlinerunner. Die Komponente der CommandLinerunner -Schnittstelle wird vor Spring Application ausgeführt.
Als nächstes verwenden wir Fälle, um zu testen, wie es verwendet wird. Fügen Sie vor dem Testen zwei Zeilen von Druckanforderungen zur Startklasse hinzu, um uns zu erleichtern, den Ausführungszeitpunkt des CommandLinerunners zu identifizieren.
@SpringbootApplicationPublic Class CommandLinerUnNApplication {public static void main (String [] args) {System.out.println ("Der Dienst zu starten"); SpringApplication.run (commandLinerUnnerApplication.class, args); System.out.println ("Der Dienst hat begonnen."); }}Als nächstes erstellen wir direkt eine Klasse, die den Befehlslinerunner erbt und ihre Run () -Methode implementiert.
@ComponentPublic Class Runner Implements CommandLinerUnner {@Override public void Run (String ... args) löst eine Ausnahme aus {System.out.println ("Der Läufer starten initialisieren ..."); }}Wir drucken einige Parameter in der Run () -Methode, um zu sehen, wie es ausgeführt wird. Starten Sie nach Abschluss das Projekt zum Testen:
... Der Dienst zu starten. .__ || | _ | | _ | | _ | | _/__, | / / / / =================================================================================================================================================================================== ____ / = / _ / _ / :: fing boot :: (v2.0.0.release) .. 2018-04-21 22: 21: 34.706 Info 27016 --- Osbwembedded.tomcat.tomcatwebserver: Tomcat mit Port (s): 8080 (http) mit Kontextpfad '' 2018-04-21 22: 21: 34,710 Info 27016 --- [Haupt] com.neo.CommandlinerAntrocknendreiter. Beginnen Sie zu initialisieren ... Der Service hat begonnen.
Basierend auf den Druckinformationen der Konsole können wir feststellen, dass die Methode in CommandLinerunner nach dem Laden des Spring -Boot -Containers ausgeführt wird und das Projekt nach Abschluss der Ausführung gestartet wird.
Wenn wir beim Starten des Containers viele Ressourcen initialisieren müssen und die ersten Ressourcen miteinander bestellt werden, wie können wir die Ausführungsreihenfolge verschiedener CommandLinerunners sicherstellen? Spring Stiefel bietet auch eine Lösung. Das heißt @Order Annotation.
Wir erstellen zwei CommandLinerUnner -Implementierungsklassen zum Testen:
Die erste Implementierungsklasse:
@Component @order (1) öffentliche Klasse OrderRunner1 implementiert commandLinerunner {@Override public void run (String ... args) löst Ausnahme aus {System.out.println ("Die OrderRunner1 starten zu initialisieren ..."); }}Die zweite Implementierungsklasse:
@Component @order (2) öffentliche Klasse OrderRunner2 implementiert commandLinerunner {@Override public void run (String ... args) löst Ausnahme aus {System.out.println ("Die OrderRunner2 starten zu initialisieren ..."); }}Starten Sie nach Abschluss des Hinzufügens die Ausführungsreihenfolge neu und beobachten Sie:
... der Service zu beginnen. ____ _ __ _ //// ___'_ __ _ (_) _ __ __ / / / / (() / ___ | '_ |' _ | | / / / // ___) | | | | | | | | | | | | | || (_ | |))) '| ____ | .__ || | _ | | _ | | _/__, | / / / / ======================================================================================================================================== ___ / = / _ //: Tomcat begann mit Port (s): 8080 (http) mit dem Kontextpfad '' 2018-04-21 22: 21: 34.710 Info 27016-[Main] com.neo.CommandLinerUnNApplication: Start CommandLinerunnerapplication in 3,796 Sekunden (JVM Runner). Beginnen Sie zu initialisieren ... Der Service hat begonnen.
Durch die Ausgabe der Konsole haben wir festgestellt, dass die Implementierungsklasse, die die @Order -Annotation hinzufügt, zuerst ausgeführt wird und je kleiner der Wert in @Order (), je früher sie beginnt.
In der Praxis kann der gleiche Zweck mit ApplicationRunner erreicht werden, und es gibt kaum einen Unterschied zwischen den beiden.
Beispielcode: https://github.com/ityouknow/spring-cloud- examples (lokaler Download)
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.