SpringBoot自定義啟動(dòng)界面的實(shí)現(xiàn)代碼
前言
實(shí)現(xiàn)自定義啟動(dòng)動(dòng)畫(huà)是一項(xiàng)有趣的任務(wù),雖然Spring Boot本身不提供內(nèi)置的動(dòng)畫(huà)功能,但可以通過(guò)一些技巧來(lái)實(shí)現(xiàn)
以下主要以Demo的形式展示,再者下面的Demo都可以聯(lián)合使用
1. banner.text
在資源文件夾(通常是src/main/resources)下放置一個(gè)名為banner.txt的文件,來(lái)自定義應(yīng)用啟動(dòng)時(shí)的Banner,文件的內(nèi)容會(huì)在應(yīng)用啟動(dòng)時(shí)顯示在控制臺(tái)中
優(yōu)點(diǎn)如下:簡(jiǎn)單且易于實(shí)現(xiàn),且只需在banner.txt文件中定義文本即可,不需要編寫(xiě)Java代碼
缺點(diǎn)如下:只能顯示靜態(tài)文本或圖案,不支持動(dòng)態(tài)動(dòng)畫(huà)效果
整體的Demo如下:
.__ __. ______ .______ __ __ _______ | \ | | / __ \ | _ \ | | | | / _____| | \| | | | | | | |_) | | | | | | | __ | . ` | | | | | | _ < | | | | | | |_ | | |\ | | `--' | | |_) | | `--' | | |__| | |__| \__| \______/ |______/ \______/ \______|
之后啟動(dòng)應(yīng)用程序即可
截圖如下:
已經(jīng)設(shè)置了banner.txt文件來(lái)顯示自定義啟動(dòng)Banner,但希望在某些情況下關(guān)閉這個(gè)Banner
1.1 配置文件關(guān)閉
在Spring Boot的配置文件(例如application.properties或application.yml)中設(shè)置spring.main.banner-mode屬性為off來(lái)關(guān)閉Banner
application.properties:
spring.main.banner-mode=off
application.yml:
yaml 復(fù)制代碼 spring: main: banner-mode: off
1.2 啟動(dòng)類(lèi)關(guān)閉
只需要設(shè)置為off即可
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class CustomBannerApplication { public static void main(String[] args) { SpringApplication app = new SpringApplication(CustomBannerApplication.class); app.setBannerMode(Banner.Mode.OFF); app.run(args); } }
1.3 命令行關(guān)閉
java -jar your-application.jar --spring.main.banner-mode=off
2. 自定義Banner類(lèi)
創(chuàng)建一個(gè)實(shí)現(xiàn)Banner接口的類(lèi),例如CustomBanner:
Demo如下:
import org.springframework.boot.Banner; import org.springframework.core.env.Environment; import java.io.PrintStream; public class CustomBanner implements Banner { @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) { out.println("Custom Startup Animation"); for (int i = 0; i < 10; i++) { try { out.print("."); Thread.sleep(500); // 延時(shí)0.5秒 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } out.println(); } }
在啟動(dòng)類(lèi)中設(shè)置自定義Banner
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class CustomBannerApplication { public static void main(String[] args) { SpringApplication app = new SpringApplication(CustomBannerApplication.class); app.setBanner(new CustomBanner()); app.run(args); } }
相對(duì)復(fù)雜的動(dòng)畫(huà)特效如下:
import org.springframework.boot.Banner; import org.springframework.core.env.Environment; import java.io.PrintStream; public class CustomBanner implements Banner { @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) { out.println("Starting Application..."); int max = 50; for (int i = 0; i <= max; i++) { out.print("\r["); for (int j = 0; j < max; j++) { if (j < i) { out.print("="); } else { out.print(" "); } } out.print("] " + i * 2 + "%"); try { Thread.sleep(100); // 延時(shí)0.1秒 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } out.println("\nApplication Started."); } }
3. 自動(dòng)配置類(lèi)
也可通過(guò)自動(dòng)配置類(lèi)
import org.springframework.boot.Banner; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; @AutoConfiguration public class BannerAutoConfiguration { @Bean public BannerApplicationRunner bannerApplicationRunner() { return new BannerApplicationRunner(); } }
實(shí)現(xiàn)一個(gè)BannerApplicationRunner類(lèi),包含自定義啟動(dòng)動(dòng)畫(huà)邏輯:
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @Component public class BannerApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("Custom Startup Animation"); for (int i = 0; i < 10; i++) { System.out.print("."); Thread.sleep(500); } System.out.println(); } }
啟動(dòng)類(lèi)無(wú)需修改
只需要添加自動(dòng)加載以及掃描對(duì)應(yīng)包即可:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SuppressWarnings("SpringComponentScan") @SpringBootApplication(scanBasePackages = {"${info.base-package}.server", "${info.base-package}.module"}) public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); } }
總的來(lái)說(shuō):
@AutoConfiguration
:確保BannerAutoConfiguration在應(yīng)用啟動(dòng)時(shí)被自動(dòng)加載@Bean
:定義一個(gè)bean,這個(gè)bean在應(yīng)用啟動(dòng)時(shí)被創(chuàng)建并注冊(cè)到Spring容器中@SpringBootApplication
:觸發(fā)組件掃描和自動(dòng)配置
4. 總結(jié)
- banner.txt方法:適合簡(jiǎn)單的靜態(tài)文本展示,易于實(shí)現(xiàn),但缺乏動(dòng)態(tài)效果
- 自定義Banner類(lèi)方法:適合復(fù)雜的動(dòng)態(tài)效果,實(shí)現(xiàn)靈活,但需要編寫(xiě)Java代碼
- 自動(dòng)配置類(lèi)方法:結(jié)合了Spring Boot自動(dòng)配置的優(yōu)點(diǎn),配置類(lèi)自動(dòng)加載,適合更復(fù)雜的配置和動(dòng)態(tài)效果
如果上述的Demo多個(gè)聯(lián)合使用,需要注意時(shí)間順序
可以在如下加入延遲,類(lèi)似如下:
public class BannerApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) { ThreadUtil.execute(() -> { ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延遲 1 秒,保證輸出到結(jié)尾 log.info("ceshi"); }); } }
到此這篇關(guān)于SpringBoot自定義啟動(dòng)界面的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)SpringBoot自定義啟動(dòng)界面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java fastdfs客戶(hù)端實(shí)現(xiàn)上傳下載文件
這篇文章主要介紹了Java fastdfs客戶(hù)端實(shí)現(xiàn)上傳下載文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Java實(shí)現(xiàn)網(wǎng)絡(luò)文件下載以及下載到指定目錄
在Spring框架中,StreamUtils和FileCopyUtils兩個(gè)工具類(lèi)提供了方便的文件下載功能,它們都屬于org.springframework.util包,可以通過(guò)簡(jiǎn)單的方法調(diào)用實(shí)現(xiàn)文件流的復(fù)制和下載,這些工具類(lèi)支持多種參數(shù)傳遞,涵蓋了文件下載的多種場(chǎng)景2024-09-09Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Springboot視圖解析器ViewResolver使用實(shí)例
這篇文章主要介紹了Springboot視圖解析器ViewResolver使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Spring?Boot?Admin?添加報(bào)警提醒和登錄驗(yàn)證功能的具體實(shí)現(xiàn)
報(bào)警提醒功能是基于郵箱實(shí)現(xiàn)的,當(dāng)然也可以使用其他的提醒功能,如釘釘或飛書(shū)機(jī)器人提醒也是可以的,但郵箱報(bào)警功能的實(shí)現(xiàn)成本最低,所以本文我們就來(lái)看郵箱的報(bào)警提醒功能的具體實(shí)現(xiàn)2022-01-01構(gòu)建SpringBoot+MyBatis+Freemarker的項(xiàng)目詳解
在本篇內(nèi)容里小編給大家整理的是關(guān)于構(gòu)建SpringBoot+MyBatis+Freemarker的項(xiàng)目的具體步驟以及實(shí)例代碼,需要的朋友們參考下。2019-06-06如何使用mybatis-generator自動(dòng)生成代碼
這篇文章主要介紹了如何使用mybatis-generator自動(dòng)生成代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10