對於使用過SpringBoot的開發者來說,程序啓動的時候輸出的由字符組成的Spring符號並不陌生。這個是SpringBoot爲自己設計的Banner:
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.2.6.RELEASE)
如果有人不喜歡這個輸出,本文說一下怎麼修改。
SpringBoot由於大力推行自動配置,取消了各種XML配置和properties配置(當然也提供了使用他們的途徑),不再使用web.xml,也優先使用了可執行jar包代替war包。你甚至刪掉WEB-INF目錄都不影響打包操作,因爲jar包用不到這個。
所以SpringBoot默認提供了各種小tricks,但是也強烈建議開發者提供自己的實現來代替默認配置,比如你可以注入一個DataSource,Spring就會使用這個而關閉自己默認的。
對於這個banner,卻沒有那麼複雜。最起碼的,如果你實在不想要看到它,關閉即可。
SpringBoot的主函數在由@Configuration、@ComponentScan、@EnableAutoConfiguration註解的一個類中,或者三歸一的註解爲@SpringBootApplication。最簡單的寫法是
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
而其中的SpringApplication還有一個實例方法run(上面的run是靜態方法,這個類一共有四個run方法,其中2個是靜態的)和另一個實例方法void setShowBanner(boolean showBanner), which is我們正想用的。所以修改代碼如下
public static void main(String[] args) {
// SpringApplication.run(Application.class, args);
SpringApplication application = new SpringApplication(Application.class);
application.setShowBanner(false);
application.run(args);
}
好了,我們不但學習到了如何關閉banner,還學會了一種新的運行程序的方法。moreover,還有一種方法也可以
public static void main(String[] args) {
// SpringApplication.run(Application.class, args);
// SpringApplication application = new
// SpringApplication(Application.class);
// application.setShowBanner(false);
// application.run(args);
new SpringApplicationBuilder().showBanner(true).sources(Application.class).run(args);
}
我註釋掉了之前我們用的代碼,最下面一行是新的方法,使用SpringApplicationBuilder。
關於幾種run方法的不同,需要的話可以到官網瞭解一下。一般用不到。
不過上面的方法有些強盜,有些因噎廢食。我們只是不想看到默認輸出,但是還想看到unique的輸出搞啊?
我們可以使用一個文件,在類路徑下增加一個banner.txt,比如放到resources文件夾。這個文件會讓springBoot關閉自己的輸出,而把文件內容打出來。你可以試一下。
另外,這個文件還可以引用外部變量。有四個變量可以用到:
${application.version} 這個是MANIFEST.MF文件中的版本號
${application.formatted-version} 這個是上面的的版本號前面加v後上括號
${spring-boot.version} 這個是springboot的版本號
${spring-boot.formatted-version}同上
比如我在banner.txt中寫了一行
${spring-boot.version}HHHHH
輸出就是
1.2.6.RELEASEHHHHH
最後,SpringBoot提供了一個接口org.springframework.boot.Banner,他的實例可以被傳給SpringApplication的setBanner(banner)方法。如果你閒得不行非要着重美化這個命令行輸出的話,可以重寫Banner接口的printBanner方法。