Prefacio
En nuestro trabajo real, siempre encontramos tal requisito. Cuando se inicia el proyecto, necesitamos hacer algunas operaciones de inicialización, como inicializar el grupo de subprocesos, cargar el certificado de cifrado con anticipación, etc. Hoy les presentaré una herramienta de arranque de primavera, que está específicamente diseñada para ayudarlo a resolver la operación de recursos de inicialización del inicio del proyecto.
Este artefacto es CommandLinerunner. El componente de la interfaz CommandLinerUnner se ejecutará antes de SpringApplication.run () después de que se inicialicen todos los Springbeans, lo que es muy adecuado para algunos trabajos de inicialización de datos al comienzo del inicio de la aplicación.
A continuación, usaremos casos para probar cómo se usa. Antes de la prueba, agregue dos líneas de indicaciones de impresión a la clase de inicio para facilitarnos identificar el momento de ejecución de CommandLinerunner.
@SpringBootApplicationPublic ClassinglinerunNerApplication {public static void main (string [] args) {System.out.println ("El servicio para iniciar"); SpringApplication.run (CommandLinerUnnerApplication.Class, Args); System.out.println ("El servicio ha comenzado"); }}A continuación, creamos directamente una clase que herede CommandLinerUnner e implementa su método run ().
@ComponentPublic Class Runner implementa CommandLinerUnner {@Override public void run (string ... args) lanza la excepción {System.out.println ("El corredor comienza a inicializarse ..."); }}Imprimimos algunos parámetros en el método run () para ver cómo se ejecuta. Después de completar, comience el proyecto para las pruebas:
... el servicio para iniciar .____ __ _ /// / ___'_ __ _ (_) _ ____ _ / / / / (() / ___ | '_ |' _ | / / `| / / / / / / / / / / / / / / | | | | | | | | | | | | || (_ |)))))) .__ || | _ | | _ | | _ | | _/__, | / / / / / = ====================================== ____ / = / _ / _ / :: Boot spring :: (v2.0.0.release) .. 2018-04-21 22: 21: 34.706 Información 27016-[Main] : TomCat comenzó en Puerto (s): 8080 (HTTP) con la ruta de contexto '' 2018-04-21 22: 21: 34.710 Información 27016 --- [Main] com.neo.CommandlinerunnerApplication: Commandlinerunnapplication en 3.796 segundos (JVM que se ejecuta para 5.128) The Runner comienza a inicializarse ... El servicio ha comenzado.
Según la información de impresión de la consola, podemos ver que el método en CommandLinerunner se ejecutará después de cargar el contenedor de arranque de resorte, y el proyecto se iniciará después de que se complete la ejecución.
Si necesitamos inicializar muchos recursos al iniciar el contenedor y los recursos iniciales se ordenan entre sí, ¿cómo podemos garantizar la orden de ejecución de diferentes comandadores de mando? Spring Boot también proporciona una solución. Eso es usar @order anotación.
Creamos dos clases de implementación de CommandLinerunner para probar:
La primera clase de implementación:
@Componente @orden (1) clase pública OrderRunner1 implementa CandionLinerUnner {@Override public void run (string ... args) lanza la excepción {System.out.println ("The OrderRunner1 comienza a inicializarse ..."); }}La segunda clase de implementación:
@Componente @orden (2) clase pública OrderRunner2 implementa CandionLinerUnner {@Override public void run (String ... args) lanza la excepción {System.out.println ("The OrderRunner2 comienza a inicializarse ..."); }}Después de completar la adición, reinicie y observe la orden de ejecución:
... el servicio para comenzar. ____ _ __ _ //// ___'_ __ _ (_) _ __ __ / / / (() / ___ | '_ |' _ | | / / // ___) | | | | | | | | | | | | | | || (_ | |))))) '| ____ | .__ || | _ | | _ | | _/__, | / / / / / ====================================___/=/_// :: Spring Boot :: (v2.0.0.RELEASE)...2018-04-21 22:21:34.706 INFO 27016 --- [ main] osbwembedded.tomcat.TomcatWebServer : Tomcat comenzó en el puerto (s): 8080 (http) con la ruta de contexto '' 2018-04-21 22: 21: 34.710 Información 27016 --- [Main] com.neo.commandlinerunnerApplication: inició comandingLinerApplication en 3.796 segundos (JVM que se ejecuta para 5.128) el orden de la orden1 comienza a inicializar ... la orden de la orden de la orden de la orden ... Para inicializar ... el servicio ha comenzado.
A través de la salida de la consola, descubrimos que la clase de implementación que agrega la anotación @order se ejecuta primero, y cuanto menor sea el valor en @order (), más temprano se inicia.
En la práctica, se puede lograr el mismo propósito utilizando ApplicationRunner, y hay poca diferencia entre los dos.
Código de muestra: https://github.com/ityouknow/spring-cloud-examples (descarga local)
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.