Springboot 2使用SpringApplication

来源:https://www.cnblogs.com/bigshark/archive/2019/08/14/11349557.html
-Advertisement-
Play Games

SpringApplication 使用靜態方法 使用構造器 使用 builder 1、失敗分析器 初始化實現了 FailureAnalyzer 介面的失敗分析器,可以在啟動失敗時,列印錯誤日誌和解決操作方法。比如啟動埠被占用時列印如下日誌: 2、自定義 Banner 可以將 banner.txt ...


SpringApplication

使用靜態方法

SpringApplication.run(MySpringConfiguration.class, args);

使用構造器

SpringApplication app = new SpringApplication(MySpringConfiguration.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);

使用 builder

new SpringApplicationBuilder(Application.class)
    .bannerMode(Banner.Mode.OFF)
    .run(args);

1、失敗分析器

初始化實現了 FailureAnalyzer 介面的失敗分析器,可以在啟動失敗時,列印錯誤日誌和解決操作方法。比如啟動埠被占用時列印如下日誌:

2019-08-07 10:22:32.534 ERROR 2616 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The Tomcat connector configured to listen on port 1111 failed to start. The port may already be in use or the connector may be misconfigured.

Action:

Verify the connector's configuration, identify and stop any process that's listening on port 1111, or configure this application to listen on another port.

2、自定義 Banner

可以將 banner.txt 文件添加到類路徑或配置 spring.banner.location 屬性指定該文件的路徑來自定義 Banner。 如果文件的編碼不是 UTF-8,則可以配置 spring.banner.charset 指定編碼。 除了文本文件,還可以將 banner.gif、banner.jpg、banner.png 圖片文件添加到類路徑,或者配置 spring.banner.image.location 指定圖片路徑。 圖片會轉換為 ASCII 圖形後,在列印 banner.txt 之前列印。

還可以在 banner.txt 添加變數,比如 ${spring-boot.version} 獲取當前 Springboot 版本。

可以通過編碼或者配置的方式指定 Banner 的輸出方式:

編碼方式:SpringApplication.setBanner(Mode.CONSOLE)SpringApplicationBuilder.bannerMode(Mode.CONSOLE)
配置文件:spring.main.banner-mode=console

  • OFF:禁止列印
  • CONSOLE:用 System.out 答應到控制台
  • LOG:列印到日誌文件

3、應用程式事件和監聽器

可以使用 SpringApplication.addListeners() 或 SpringApplicationBuilder.listeners() 註冊事件監聽器;
還可以創建文件 META-INF/spring.factories,key 是 org.springframework.context.ApplicationListener,value 是監聽器實現類,示例如下;

org.springframework.context.ApplicationListener=com.example.project.MyListener

應用程式事件的發送順序

  1. ApplicationStartingEvent 在應用啟動但是還沒做任何處理(除了監聽器和初始化器)之前發送
  2. ApplicationEnvironmentPreparedEvent 在上下文需要的環境 Environment 已知,上下文創建之前發送
  3. ApplicationPreparedEvent 在刷新開始之前,載入 bean 定義之後發送
  4. ApplicationStartedEvent 在刷新上下文之後,調用應用程式和命令行運行程式之前發送
  5. ApplicationReadyEvent 在調用應用程式和命令行運行程式之後發送。表示應用程式已準備好為請求提供服務。
  6. ApplicationFailedEvent 啟動發生異常時發送

監聽器相關原理見 Spring事件監聽器源碼

4、Web 環境

指定 web 環境:SpringApplication.setWebApplicationType(WebApplicationType.SERVLET)SpringApplicationBuilder.web(WebApplicationType.SERVLET)

WebApplicationType

  • NONE:非 web 環境,上下文使用AnnotationConfigApplicationContext
  • SERVLET:Spring MVC 環境,上下文使用AnnotationConfigServletWebServerApplicationContext
  • REACTIVE:Spring WebFlux 環境,上下文使用AnnotationConfigReactiveWebServerApplicationContext

5、指定參數 args

如使用 debug 模式運行程式:java -jar myproject.jar --debug

6、使用 ApplicationRunner 和 CommandLineRunner

實現這兩個介面,可以在應用程式啟動後,執行一些操作,預設會先執行 ApplicationRunner。

7、應用退出

每個 Springboot 應用都會向 JVM 註冊一個關閉鉤子,以確保ApplicationContext在退出時正常關閉。 可以使用所有標準的 Spring 生命周期回調(例如DisposableBean介面或@PreDestroy註解)。

此外,如果 bean 希望在調用SpringApplication.exit()時返回特定的退出碼,則可以實現org.springframework.boot.ExitCodeGenerator介面。 然後將退出代碼傳遞給System.exit(),如下所示:

@SpringBootApplication
public class ExitCodeApplication {

    @Bean
    public ExitCodeGenerator exitCodeGenerator() {
        return () -> 42;
    }

    public static void main(String[] args) {
        System.exit(SpringApplication.exit(SpringApplication.run(Bootstrap.class, args)));
    }

}

ExitCodeGenerator介面也可以通過異常方式實現。發生此類異常時,Spring Boot 返回實現的getExitCode()方法的退出碼。

8、管理功能

通過指定spring.application.admin.enabled屬性,可以為應用程式啟用管理功能。 這會在MBeanServer平臺上公開SpringApplicationAdminMXBean。 可以使用此功能遠程管理 Spring Boot 應用程式。 此功能對於任何服務包裝器的實現也很有用。

註意:啟用此功能時要小心,因為 MBean 公開了一種關閉應用程式的方法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 裝飾器模式的目的——**核心部分和裝飾部分可以自由組合。** 裝飾器模式要求: - 裝飾可選 - 裝飾可擴展 - 核心部分可擴展 ...
  • 顧名思義,創建型模式的聚焦點在如何創建對象能夠將對象的創建與使用最大化的分離從而降低系統的耦合度。 ...
  • 前言 我們終於學習最後一個設計原則了,其實博主更新的還是挺慢的,因為我想一個一個吃透以後再繼續學習,切記不要囫圇吞棗。 基本介紹 其實這個能說的內容很少,就是: 儘量使用合成/聚合的方式,而不是使用繼承 為什麼要這樣做?有一下兩點原因: 1. 通過繼承來進行復用的主要問題在於繼承復用會破壞系統的封裝 ...
  • 前言 迪米特法則,聽名字有點奇怪,但是這個法則真的非常非常有意思,在我看來,這個法則其實描述的就是一個矜持的小姑娘,害羞的惹人憐愛。但是啊,姑娘雖好,切不可"貪杯"哦~ 基本介紹 1. 一個對象應該對其他對象保持最少的瞭解。 2. 類與類關係越密切,耦合度越大 3. 一個類對自己依賴的類知道的越少越 ...
  • 作者:_liuxx cnblogs.com/liuyh/p/8027833.html 前後端分離模式下,所有的交互場景都變成了數據,傳統業務系統中的許可權控制方案在前端已經不再適用,因此引發了我對許可權的重新思考與設計。對於非前後端分離模式下的許可權思考,看這裡:通用數據許可權的思考與設計 許可權控制到底控制 ...
  • 什麼是建造者模式? 工廠模式聚焦於創建出一個對象,而建造者除此之外還需要為創建的對象賦值。 簡單來說,建造者模式=創建對象+屬性賦值。 建造者模式應用場景 建造者模式適合創建 類中包含多個參數且需要定製化 的情況。 簡單來說,建造者模式的目的就是創造 一條龍服務 :不僅創建出對象,順便給屬性賦值。 ...
  • 簡單來說,通過複製的方式創建對象。 【舉個慄子】:點外賣的收貨地址 ...
  • 和單例模式相似,工廠模式同樣聚焦於在考慮整個軟體構建的情況下合理創建對象,從而保證軟體的擴展性和穩定性。 簡單工廠模式:適用客戶端無需擴展的應用場景 //工廠方法模式:適合客戶端創建單個產品的應用場景 //抽象工廠模式:適合創建多個產品(產品固定)的應用場景 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...