序文
プロジェクトが始まったときに私たちはspringbootに注意し、それを出力しますコンソールは、航空ショー、あまりにも単調すぎて普通の一般的すぎを比較する一部の学生のために、バナーが付属していますので、技術のリアルタイム性能であります
カスタムバナー
非常にシンプルな、単にリソースディレクトリ缶にカスタムbanner.txtファイルを追加
banner.txtコンテンツ
$ {AnsiColor.BRIGHT_RED} //////////////////////////////////////////// //////////////////////// // _ooOoo_ // // o8888888o // // 88" 88。」 // // (| ^ _ ^ |) // // O \ = / O // // ____ / `--- '\ ____ // // '。\\ | | // `。 // // / \\ ||| :||| // \ // // / _ ||||| - : - ||||| - \ // // | | \\\ - // / | | // // | \ _ | '' \ --- / '' | | // // \ .- \ __ `-` ___ / - 。/ // // ___ `。。」/--.-- \ `。。___ // // "" '< `.___ \ _ <|> _ / ___。'。> ' ""。 // | |: ` - \`; `\ _ /`;.`/ -` :. | | // // 。\ \` - \ _ __ \ / __ _ /.- `/ / // / / ======== `` -.____ -.___ \ _____ / ___.- ____.- ` '======== // // ` = --- =' // / / ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ // // ナモナモ阿弥陀仏阿弥陀 // ////////////////////////////////// //////////////////////////////////
=================分割ライン=============================== =
私たちは、カスタムバナーを設定しますで停止することはできませんもちろん、航空ショープログラム猿、として、〜このような構成から行くために、カスタムバナーを実現することができる理由のは、以下のシュシュでソースコードに行ってみましょう
まず、のは今を見て段階的に行かせ、機能のメインエントランスのアプリケーションを実行する方法を起動する入力します
SpringApplicationクラス のパブリック 静的 ConfigurableApplicationContext RUN(クラス<?> PRIMARYSOURCE、文字列...引数){ リターン RUN(新しい新しいクラス<?> [] {} PRIMARYSOURCE、引数); } //新しい新SpringApplication(primarySources)私たちは、このメソッドを持っていませんこれは論理的springboot自動組立(SPI)である、と私たちは後ろに直接見て、参照してください(引数RUN)
のパブリック 静的 ConfigurableApplicationContext RUN(クラス<?> {[] primarySources、String []型引数に) 返す 新新(primarySources)SpringApplicationを。RUNに(引数) ; } 公共ConfigurableApplicationContext RUN(文字列引数...){ ストップウォッチストップウォッチ = 新しいストップウォッチ(); stopWatch.start(); ConfigurableApplicationContextコンテキスト = NULL ; コレクション <SpringBootExceptionReporter> exceptionReporters = 新しい ArrayListを<> (); configureHeadlessProperty(); SpringApplicationRunListenersリスナー = getRunListeners(引数)。 listeners.starting(); 試す{ ApplicationArguments applicationArguments = 新しいDefaultApplicationArguments(引数); ConfigurableEnvironment環境 = prepareEnvironment(リスナー、applicationArguments)。 configureIgnoreBeanInfo(環境);
//我々はこのバナーの処理を開始するための論理的なステップ、見た目にポイントであることがわかった バナーprintedBanner = printBanner(環境); コンテキスト = createApplicationContext(); exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporterの。クラス、 新しい新しいクラス[] {ConfigurableApplicationContext 。クラス}、コンテキスト); prepareContext(コンテキスト、環境、リスナー、applicationArguments、printedBanner); refreshContext(コンテキスト)。 afterRefresh(コンテキスト、applicationArguments)。 stopWatch.stop(); もし(この.logStartupInfo){ 新しい StartupInfoLogger(この.mainApplicationClass).logStarted(getApplicationLog()、ストップウォッチ)。 } listeners.started(コンテキスト)。 callRunners(コンテキスト、applicationArguments)。 } キャッチ(ThrowableのEX){ handleRunFailure(文脈、EX、exceptionReporters、リスナー)。 スロー 新しいIllegalStateExceptionを(EX)を、 } 試みる{ listeners.running(コンテキスト)。 } キャッチ(ThrowableのEX){ handleRunFailure(文脈、EX、exceptionReporters、NULL ); スロー 新しいIllegalStateExceptionを(EX)を、 } 戻りコンテキスト; }
処理ロジックのバナー
プライベートバナーprintBanner(ConfigurableEnvironment環境){ 場合(この .bannerMode == Banner.Mode.OFF){ リターン ヌル。 } ResourceLoader resourceLoader =(この .resourceLoader!= nullの)?この.resourceLoader :新しいDefaultResourceLoader(のgetClassLoader()); SpringApplicationBannerPrinter bannerPrinter = 新しい SpringApplicationBannerPrinter(resourceLoader、この.banner)。 もし(この== .bannerMode Mode.LOG){ リターン bannerPrinter.print(環境、この.mainApplicationClass、ロガー); }
//バナーが閉じていないと、ログ・ファイルに書き込まれ、これに来て、時間を指定していない リターンbannerPrinter.print (環境、この.mainApplicationClass、のSystem.out); } 公共バナー印刷(<?>環境環境、クラスsourceClassを,,のPrintStream OUT){
//ここでゲットバナーコンテンツ バナーバナー = getBanner(環境); banner.printBanner(環境、 sourceClassを,, OUT); リターン 新しい新PrintedBanner(バナー、sourceClassを、); } プライベートGetBannerバナー(環境環境){ バナーバナー = 新しい新しいバナーは、();
//我々は、バナーのコンテンツタイプの設定の最良の航空ショーの写真(内向的の人々はまだ少し優れている)を持っていない私たちは、次のステップを参照して banners.addIfNotNull(getImageBanner(環境) );
//私たちは、テキストベースの構成バナーあるので、ここでgetTextBannerを見て(環境) banners.addIfNotNull(getTextBanner(環境)); IF (banners.hasAtLeastOneBanner()){ 戻りバナー; } IF(この .fallbackBanner! = NULL ){ 戻り 、この.fallbackBannerを; } 戻りDEFAULT_BANNERと、 }
//ここでの学生はの原則を知っている必要があります プライベート{バナーgetTextBanner(環境環境を)
//カスタム設定ファイルのバナーアドレス取得 文字列LOCATION = environment.getProperty(BANNER_LOCATION_PROPERTY、DEFAULT_BANNER_LOCATION ;) リソースリソース = この.resourceLoader.getResourceを( LOCATION); IF (resource.exists()){ 戻り 新しい新しいResourceBanner(リソース); } 戻り NULL ; } //定数DEFAULT_BANNER_LOCATIONのbanner.txtファイル点に
静的 最終列DEFAULT_BANNER_LOCATION = " banner.txt "。