天天看點

Spring Boot:延遲初始化與自定義橫幅

延遲初始化

​SpringApplication​

​​允許延遲初始化應用程式,啟用延遲初始化後,​

​bean​

​​将根據需要建立,而不是在應用程式啟動期間建立。是以,啟用延遲初始化可以減少應用程式啟動所需的時間。在​

​web​

​​應用程式中,啟用延遲初始化,将導緻許多與​

​web​

​​相關的​

​bean​

​​在收到​

​HTTP​

​請求之前無法初始化。

延遲初始化的一個缺點是,它會延遲應用程式問題的發現。如果一個配置錯誤的​

​bean​

​​被延遲初始化,那麼在啟動期間将不會發生故障,并且隻有在初始化該​

​bean​

​​時,問題才會出現。還必須確定​

​JVM​

​​有足夠的記憶體來容納應用程式的所有​

​bean​

​​,而不僅僅是那些在啟動期間初始化的​

​bean​

​​。由于這些原因,預設情況下不啟用延遲初始化,建議在啟用延遲初始化之前對​

​JVM​

​的堆大小進行微調。

可以使用​

​SpringApplicationBuilder​

​​類的​

​lazyInitialization​

​方法來設定延遲初始化。

package com.kaven.springboot;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder()
                .sources(SpringbootApplication.class)
                .lazyInitialization(true)
                .run(args);
    }
}      

或者使用​

​SpringApplication​

​​類的​

​setLazyInitialization​

​方法進行設定。

package com.kaven.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(SpringbootApplication.class);
        application.setLazyInitialization(true);
        application.run(args);
    }
}      

還可以在配置檔案中使用​

​spring.main.lazy-initialization​

​​屬性來設定,比如​

​application.properties​

​:

spring.main.lazy-initialization=true      

如果想在應用程式使用延遲初始化的同時禁用某些​

​bean​

​​的延遲初始化,可以使用​

​@Lazy(false)​

​​注解将它們的延遲屬性顯式設定為 ​

​false​

​。

自定義橫幅

可以通過将​

​banner.txt​

​​檔案添加到類路徑或将​

​spring.banner.location​

​​屬性設定為此類檔案的位置來更改啟動時列印的橫幅。如果檔案的編碼不是​

​UTF-8​

​​,可以設定​

​spring.banner.charset​

​​屬性。在​

​banner.txt​

​檔案中,可以使用以下任何占位符:

變量 描述

​${spring-boot.version}​

使用的​

​Spring Boot​

​版本

​${spring-boot.formatted-version}​

使用的​

​Spring Boot​

​​版本,格式化顯示(用括号括起來并以​

​v​

​​為字首),例如​

​(v2.6.2)​

​${Ansi.NAME}​

​​、​

​${AnsiColor.NAME}​

​​、​

​${AnsiBackground.NAME}​

​​、​

​${AnsiStyle.NAME}​

設定控制台中輸出内容的字型顔色(前兩個)、背景顔色、字型格式

将​

​banner.txt​

​檔案添加到類路徑。

Spring Boot:延遲初始化與自定義橫幅
${AnsiColor.RED}
${AnsiBackground.BLACK}
${AnsiStyle.BOLD}

//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不當機     永無BUG                     //

${Ansi.YELLOW}
Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}      

啟動應用,效果如下圖所示。

Spring Boot:延遲初始化與自定義橫幅

列印方式

還可以使用​

​spring.main.banner-mode​

​​屬性來确定橫幅的列印方式,預設将橫幅列印到​

​System.out​

​,即輸出到控制台。

enum Mode {

    /**
     * 禁用橫幅的列印
     */
    OFF,

    /**
     * 将橫幅列印到System.out
     */
    CONSOLE,

    /**
     * 将橫幅列印到日志檔案
     */
    LOG

  }      
Spring Boot:延遲初始化與自定義橫幅
Spring Boot:延遲初始化與自定義橫幅
Spring Boot:延遲初始化與自定義橫幅

還可以通過​

​SpringApplication​

​​類的​

​setBannerMode​

​方法來設定列印方式。

package com.kaven.springboot;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(SpringbootApplication.class);
        application.setBannerMode(Banner.Mode.LOG);
        application.run(args);
    }
}      

或者通過​

​SpringApplicationBuilder​

​​類的​

​bannerMode​

​方法來設定。

package com.kaven.springboot;

import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder()
                .sources(SpringbootApplication.class)
                .bannerMode(Banner.Mode.LOG)
                .run(args);
    }
}      

圖檔檔案

除了​

​txt​

​​檔案之外,還可以将​

​banner.gif​

​​、​

​banner.jpg​

​​或​

​banner.png​

​​圖檔檔案添加到類路徑或設定​

​spring.banner.image.location​

​​屬性,圖檔會被轉換為​​

​ASCII​

​藝術表示并列印在橫幅上方。

Spring Boot:延遲初始化與自定義橫幅

效果如下圖所示:

Spring Boot:延遲初始化與自定義橫幅
Spring Boot:延遲初始化與自定義橫幅

效果如下圖所示:

Spring Boot:延遲初始化與自定義橫幅