延遲初始化
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
檔案中,可以使用以下任何占位符:
變量 | 描述 |
| 使用的 版本 |
| 使用的 版本,格式化顯示(用括号括起來并以 為字首),例如 |
、 、 、 | 設定控制台中輸出内容的字型顔色(前兩個)、背景顔色、字型格式 |
将
banner.txt
檔案添加到類路徑。
${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.main.banner-mode
屬性來确定橫幅的列印方式,預設将橫幅列印到
System.out
,即輸出到控制台。
enum Mode {
/**
* 禁用橫幅的列印
*/
OFF,
/**
* 将橫幅列印到System.out
*/
CONSOLE,
/**
* 将橫幅列印到日志檔案
*/
LOG
}
還可以通過
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
藝術表示并列印在橫幅上方。
效果如下圖所示:
效果如下圖所示: