在使用 Spring Boot 的過程中,你可能不太知道的點?

如題,本文主要羅列一些在使用 Spring Boot 的過程中,大家可能不太知道的點:

  • Spring Boot 的精髓,主要包括自動配置、起步依賴、Actuator 和命令行界面。
  • Spring Initializr,Click HERE,一個 Spring Boot 的快速搭建網站。
  • @SpringBootApplication註解開啓了 Spring 組件掃描和 Spring Boot 的主動配置功能。
  • org.springframework.boot:spring-boot-maven-plugin構建插件的主要功能是把項目打包成一個可執行的超級 JAR,包括把應用程序的所有依賴打入 JAR 文件內,併爲 JAR 添加一個描述文件,其中的內容能讓你用java -jar命令來運行應用程序。
  • spring-boot-starter-parent作爲上一級依賴,就能夠利用 Maven 的依賴管理功能,繼承很多常用庫的依賴版本,在你聲明依賴時就不用再去指定版本號了。
  • 起步依賴本質上是一個 Maven 項目對象模型(Project Object Model,POM),定義了對其它庫的傳遞依賴,這些東西加在一起即支持某項功能。起步依賴本身的版本由正在使用的 Spring Boot 的版本來決定,而起步依賴則會決定它們引入的傳遞依賴的版本。
  • Maven 總是會用最近的依賴,也就是說,你在項目的構建說明文件裏增加的依賴,即顯示引入的依賴及版本,會覆蓋傳遞依賴引入的另一個依賴。
  • 在嚮應用程序加入 Spring Boot 時,有一個名爲spring-boot-autoconfigure的 JAR 文件,其中包含了很多配置類。而這些配置類上,都加了@Conditional註解,即條件註解,引入條件化配置。
  • 條件化配置允許配置存在於應用程序中,但在滿足某些特定條件之前都忽略這個配置。Spring Boot 的自動注入功能,就是利用條件化配置實現的。
  • 想要覆蓋 Spring Boot 的自動配置,你所要做的僅僅是編寫一個顯示的配置。Spring Boot 會發現你的配置,隨後降低字段配置的優先級,以你的配置爲準。Spring Boot 的設計就是優先加載應用級配置,隨後再考慮自動配置類。
  • Spring Boot 能從多種屬性源獲得屬性,以下屬性源按優先級從高到低排序,任何在高優先級屬性源裏設置的屬性都會覆蓋低優先級的相同屬性,包括:
    • 命令行參數;
    • java:comp/env裏的 JNDI 屬性;
    • JVM 系統屬性;
    • 操作系統環境變量;
    • 隨機生成的帶random.*前綴的屬性(在設置其他屬性時,可以引用它們,比如${random.long});
    • 應用程序以外的application.properties或者application.yml文件;
    • 打包在應用程序內的application.properties或者application.yml文件;
    • 通過@PropertySource標註的屬性源;
    • 默認屬性。
  • application.propertiesapplication.yml文件能夠放在以下四個位置,優先級從高到低排序:
    • 外置,相對於應用程序運行目錄的/config子目錄裏;
    • 外置,在應用程序運行的目錄裏;
    • 內置,在config包內;
    • 內置,在Classpath根目錄。
  • 如果你在同一優先級的位置同時有application.propertiesapplication.yml文件時,那麼application.yml裏的屬性會覆蓋application.properties裏的屬性。
  • 默認情況下,Spring Boot 會用 Logback 來記錄日誌,並用INFO級別輸出到控制檯。如果你想要切換日誌實現,如Log4j或者Log4j2,那麼你只需要修改依賴,引入對應該實現的起步依賴,同時排除掉Logback即可。
  • DataSource Bean 是一個連接池,如果Classpath裏有 Tomcat 的連接池DataSource,那麼就會使用這個連接池;否則,Spring Boot 會在Classpath裏查找以下連接池:
    • HikariCP
    • Commons DBCP
    • Commons DBCP 2
  • 對於@ConfigurationProperties註解,從技術上來講,僅使用它是不會生效的,除非先向 Spring 配置類添加@EnableConfigurationProperties註解。但通常無需這麼做,因爲 Spring Boot 自動配置後面的全部配置類都已經添加了@EnableConfigurationProperties註解。因此,除非你完全不用自動配置(那怎麼可能?),否則就無需顯式地添加@EnableConfigurationProperties註解。
  • Spring Boot 的屬性解析器非常智能,它會自動把駝峯規則的屬性和使用連字符或下劃線的同名屬性關聯起來。換句話說,i.loveU這個屬性和i.love_u以及i.love-u都是等價的。
  • Spring Boot 自動配置的默認錯誤處理器會查找名爲error的視圖,如果找不到就用默認的白標錯誤視圖。如果我們使用了不同的視圖解析器,則命名略有差別,如:
    • 實現了 Spring 的View接口的 Bean,其 ID 爲error,由 Spring 的BeanNameViewResolver所解析;
    • 如果配置了 Thymeleaf,則有名爲error.html的 Thymeleaf 模板;
    • 如果配置了 FreeMarker,則有名爲error.ftl的 FreeMarker模板;
    • 如果配置了 Velocity,則有名爲error.vm的 Velocity模板;
    • 如果是用 JSP 視圖,則有名爲error.jsp的 JSP 模板。
  • Spring 的SpringJUnit4ClassRunner可以在基於 JUnit 的應用程序測試里加載 Spring 應用程序上下文。

版權聲明:本文的內容主要來自於《Spring Boot 實戰》這本書,感興趣的同學可以自行購買,閱讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章