prefácio
Notamos springboot quando o projeto começou, o console será impresso que vem com banner, em seguida, para alguns alunos que comparam show aéreo, demasiado monótono muito comum demasiado geral e, portanto, é o desempenho em tempo real da tecnologia
banner personalizado
Muito simples, basta adicionar um arquivo banner.txt costume na lata diretório de recursos
conteúdo banner.txt
$ {AnsiColor.BRIGHT_RED} //////////////////////////////////////////// //////////////////////// // _ooOoo_ // // o8888888o // // 88" 88." // // (| ^ _ ^ |) // // O \ = / O // // ____ / `--- '\ ____ // // '. \\ | | // `. // // / \\ ||| : ||| // \ // // / _ ||||| -: - ||||| - \ // // | | \\\ - // / | | // // | \ _ | '' \ --- / '' | | // // \ .- \ __ `-` ___ / -. / // // ___ `. .' /--.-- \ `. . ___ // // "" '< `.___ \ _ <|.> _ / ___'. > ' "". // | |: `- \`; '\ _ /`;.`/ -` :. | | // // . \ \ `- \ _ __ \ / __ _ /.-` / / // / / ======== `` -.____ -.___ \ _____ / ___.- ____.- ` '======== // // ` = --- =' // / / ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ // // Namo Namo Amitabha Buda Amitabha // ////////////////////////////////// //////////////////////////////////
================= linha divisória =============================== =
Como um programa de macaco show aéreo, é claro que não pode simplesmente parar em vão configurar um banner personalizado, vamos para o código-fonte da seguinte Chou Chou por que tal configuração pode alcançar um banner personalizado, para ir de ~
Primeiro, insira o Aplicação da entrada principal da função inicia o método de execução, vamos dar uma olhada agora ir passo a passo
SpringApplication classe pública estática ConfigurableApplicationContext RUN (<?> Class PrimarySource, String ... args) { return RUN ( new new <?> Class [] {} PrimarySource, args); } // novos novo SpringApplication (fontes primárias) não temos este método veja, esta é uma montagem automática springboot lógica (SPI), e nós olhamos diretamente atrás RUN (args )
pública estática ConfigurableApplicationContext RUN (Class <?> [] fontes primárias, string [] args) { retornar novo novo SpringApplication (fontes primárias). RUN (args) ; } pública ConfigurableApplicationContext RUN (String ... args) { Cronômetro = novo Cronometro (); stopWatch.start (); Contexto ConfigurableApplicationContext = nulo ; Coleção <SpringBootExceptionReporter> exceptionReporters = new ArrayList <> (); configureHeadlessProperty (); SpringApplicationRunListeners ouvintes = getRunListeners (args); listeners.starting (); tente { ApplicationArguments applicationArguments = novas DefaultApplicationArguments (args); ConfigurableEnvironment ambiente = prepareEnvironment (ouvintes, applicationArguments); configureIgnoreBeanInfo (Ambiente);
// descobrimos que este é um processo passo bandeira início lógico, o ponto foi ver Bandeira printedBanner = printBanner (Ambiente); contexto = createApplicationContext (); exceptionReporters . = getSpringFactoriesInstances (SpringBootExceptionReporter classe , nova nova classe] [{ConfigurableApplicationContext. classe }, contexto); prepareContext (contexto, ambiente, os ouvintes, applicationArguments, printedBanner); refreshContext (contexto); AfterRefresh (contexto, applicationArguments); stopWatch.stop (); Se ( esse .logStartupInfo) { novo StartupInfoLogger ( este .mainApplicationClass) .logStarted (getApplicationLog (), cronômetro); } Listeners.started (contexto); callRunners (contexto, applicationArguments); } De captura (ex Throwable) { handleRunFailure (contexto, ex, exceptionReporters, ouvintes); lançar nova IllegalStateException (ex); } Tentar { listeners.running (contexto); } Captura (Throwable ex) { handleRunFailure (contexto, ex, exceptionReporters, nula ); lançar novaIllegalStateException (ex); } Retornar contexto; }
bandeira processamento lógico
privado bandeira printBanner (ambiente ConfigurableEnvironment) { se ( este .bannerMode == Banner.Mode.OFF) { return nulo ; } ResourceLoader ResourceLoader = ( este .resourceLoader! = Nulo )? este .resourceLoader : nova DefaultResourceLoader (getClassLoader ()); SpringApplicationBannerPrinter bannerPrinter = novo SpringApplicationBannerPrinter (ResourceLoader, este .banner); Se ( esse== .bannerMode Mode.LOG) { retornar bannerPrinter.print (Meio Ambiente, a este .mainApplicationClass, Logger); }
// bandeira não está fechada e é escrito para o arquivo de log não especifica o tempo, vir a este bannerPrinter.print retorno (Ambiente, a este .mainApplicationClass, o System.out); } pública bandeira impressão (Meio Ambiente Meio Ambiente, Class <?> SourceClass ,, PrintStream OUT) {
// Obter aqui conteúdo do banner banner banner = getBanner (Ambiente); banner.printBanner (Meio Ambiente, SourceClass ,, OUT); retornar nova nova PrintedBanner (banner, SourceClass,); } privadaGetBanner Banner (Meio Ambiente Meio Ambiente) { Banners = novas novas Banners ();
// não temos o melhor show de ar imagens de configuração bandeira tipo de conteúdo (pessoas introvertidos ainda um pouco melhor são), então vemos o próximo passo banners.addIfNotNull (getImageBanner (meio ambiente) );
// estamos bandeira configuração baseada em texto, assim que olhar getTextBanner aqui (Ambiente) banners.addIfNotNull ( getTextBanner (Ambiente) ); IF (banners.hasAtLeastOneBanner ()) { return Banners; } IF ( a este .fallbackBanner! = nulo ) { voltar a esta .fallbackBanner; } retorno DEFAULT_BANNER; } // aqui os alunos devem conhecer os princípios da
Privado bandeira getTextBanner (Meio Ambiente Meio Ambiente) {
// obter a configuração personalizada endereço de arquivo bandeira de Cordas LOCALIZAÇÃO = environment.getProperty (BANNER_LOCATION_PROPERTY, DEFAULT_BANNER_LOCATION ); Resource Resource = a esta .resourceLoader.getResource (localização); IF (resource.exists ()) { retornar novo novo ResourceBanner (Resource); } return nula ; } // constantes pontos de arquivo DEFAULT_BANNER_LOCATION banner.txt à
estática final string = DEFAULT_BANNER_LOCATION "banner.txt ";