Prefácio
Em nosso trabalho real, sempre encontramos esse requisito. Quando o projeto é iniciado, precisamos fazer algumas operações de inicialização, como inicializar o pool de threads, carregar o certificado de criptografia com antecedência, etc. Hoje, apresentarei a você uma ferramenta de inicialização de mola, projetada especificamente para ajudá -lo a resolver a operação de recursos de inicialização da inicialização do projeto.
Este artefato é comandlinerunner. O componente da interface CommandLineRunner será executado antes do início da SpringApplication.run (), o que é muito adequado para alguns trabalhos de inicialização de dados no início da inicialização do aplicativo.
Em seguida, usaremos casos para testar como é usado. Antes de testar, adicione duas linhas de impressão à aula de inicialização para facilitar a identificação do tempo de execução do CommandLinerunner.
@Springbootapplicationpublic classe commandLinerunneApplication {public static void main (string [] args) {System.out.println ("o serviço a ser iniciado."); Springapplication.run (commandLineRunneApplication.class, args); System.out.println ("O serviço começou"); }}Em seguida, criamos diretamente uma classe que herda o comandoNERunner e implementa seu método run ().
@ComPonentPublic Class Runner implementa commandLinerunner {@Override public void run (string ... args) lança exceção {System.out.println ("O corredor inicia a inicializar ..."); }}Imprimos alguns parâmetros no método run () para ver como ele é executado. Após a conclusão, inicie o projeto para testes:
... o serviço para começar .____ __ _ /// / ___'_ __ _ (_) _ ____ _ / / / / (() / ___ | '_ |' _ | / / / `| / / / / / / / / / / / / / / / / / / / / | | | | | | | | | | | | | .__ || | _ | | _ | | _ | | _/__, | / / / / / ===================================== ____ / = / _ / _ / :: Spring Boot :: (v2.0.0.reLease) .. 2018-04-21 22: 21: 34.706 info 27016 --- [2018-04-21 22: 21: 34.706 27016- : Tomcat Iniciado em portas: 8080 (http) com caminho de contexto '' '2018-04-21 22: 21: 34.710 Info 27016 --- [Main] com.neo.CommandLinerunNerApplication: iniciou o comandlineNnerApplication em 3.796 segundos (JVM em execução para 5.128)
Com base nas informações de impressão do console, podemos ver que o método no CommandLineRunner será executado após o carregamento do contêiner de inicialização da mola e o projeto será iniciado após a conclusão da execução.
Se precisarmos inicializar muitos recursos ao iniciar o contêiner e os recursos iniciais são solicitados entre si, como podemos garantir a ordem de execução de diferentes comandlinerunners? A bota de primavera também fornece uma solução. Isso é para usar a anotação @Order.
Criamos duas classes de implementação CommandLinerunner para testar:
A primeira classe de implementação:
@Componente @order (1) public class OrderRunner1 implementa commandLineRunner {@Override public void run (string ... args) lança exceção {System.out.println ("O OrderRunner1 inicia a inicializar ..."); }}A segunda classe de implementação:
@Componente @order (2) public class OrderRunner2 implementa commandLineRunner {@Override public void run (string ... args) lança exceção {System.out.println ("O OrderRunner2 começa a inicializar ..."); }}Após a conclusão da adição, reinicie e observe a ordem de execução:
... o serviço para começar. ____ _ __ _ //// ___'_ __ _ (_) _ __ __ / / / / () / ___ | '_ |' _ | | / / // ___) | | | | | | | | | | | | | | || (_ | |))))) '| ____ | .__ || | _ | | _ | | _/__, | / / / / / ==================================== ___ / = / _ // :: Spring Boot :: (v2.0.0.reLease) ... 2018-04-21 22: 21: 34.706 info 27016-[main] OSB) Tomcat Iniciado em Portas (s): 8080 (HTTP) com caminho de contexto '' '2018-04-21 22: 21: 34.710 Info 27016 --- [Main] com.neo.CommandlinerunneApplication: iniciou o comandinnerApplication em 3,796 segundos (JVM Running para 5.128) The OrdemNer OrdemNner em 3,796 segundos (JVM Running para 5.128) Para inicializar ... o serviço começou.
Através da saída do console, descobrimos que a classe de implementação que adiciona a anotação @Order é executada primeiro e quanto menor o valor em @Order (), mais cedo ele inicia.
Na prática, o mesmo objetivo pode ser alcançado usando o ApplicationRunner, e há pouca diferença entre os dois.
Código de exemplo: https://github.com/ityouknok/spring-cloud-examples (download local)
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.