如題,本文主要羅列一些在使用 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.properties
和application.yml
文件能夠放在以下四個位置,優先級從高到低排序:- 外置,相對於應用程序運行目錄的
/config
子目錄裏; - 外置,在應用程序運行的目錄裏;
- 內置,在
config
包內; - 內置,在
Classpath
根目錄。
- 外置,相對於應用程序運行目錄的
- 如果你在同一優先級的位置同時有
application.properties
和application.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 的
- Spring 的
SpringJUnit4ClassRunner
可以在基於 JUnit 的應用程序測試里加載 Spring 應用程序上下文。
版權聲明:本文的內容主要來自於《Spring Boot 實戰》這本書,感興趣的同學可以自行購買,閱讀。