本節將深入探討Spring Boot的用法.其內容包括:
- 構建系統
- 自動配置(auto-configuration),以及
- 如何運行你的應用程序.
此外,我們還會涵蓋Spring Boot最佳實踐.
儘管Spring Boot沒有什麼特殊之處,但遵從我們的建議會讓你的開發過程變得更輕鬆.
如果你還是Spring Boot新手,建議您在學習本節之前先閱讀入門指南.
1. 構建系統
強烈建議您選擇一個可支持依賴管理並能將工件(artifacts)發佈到“Maven中央”倉庫的構建系統.
我們建議您選用Maven或Gradle.
雖然Spring Boot也能與其它構建系統(如:Ant)一起工作,但對這些構建系統的支持並不是很好.
1.1. 依賴管理
每個Spring Boot版本都提供了受支持的一系列依賴列表.
但事實是:你不應該為構建配置中的依賴指定具體版本,因為Spring Boot會幫你完成版本管理.
當升級Spring Boot時,這些依賴會同步升級.
提示
若有特殊需要,你也可以指定依賴的具體版本來覆蓋Spring Boot的推薦版本.
精選列表包含可與Spring Boot一起使用的所有spring模塊以及完善的第三方包列表.
該列表是可與Maven和Gradle一起使用的標準依賴清單(spring-boot-dependencies)。
提示
每個Spring Boot版本都與特定版本的Spring Framework強關聯.因此,強烈建議您不要指定具體版本.
1.2. Maven
Maven用戶可繼承spring-boot-starter-parent項目來使用合理的默認設置.
parent項目提供如下功能:
- 將Java 1.8 作為默認編譯級別
- 源碼採用UTF-8編碼
- 從spring-boot-dependencies pom繼承的依賴管理部分可管理公共依賴的版本. 當在自己的POM中使用時,你可以省略依賴的<version>標籤./<version>
- 帶有repackage execution id的repackage goal execution
- 合理的資源過濾.
- 合理的插件配置(exec plugin, Git commit ID, and shade).
- 可對application.properties和application.yml進行合理的資源過濾,還可過濾特定配置文件(如:過濾application-dev.properties和application-dev.yml文件)
注意
由於application.properties和application.yml文件都可接受Spring形式的佔位符(${…}), 為了不起衝突,Maven過濾將使用@..@形式的佔位符(可設置resource.delimiter Maven屬性來覆蓋該行為)
1.2.1. 繼承Starter Parent
要讓項目繼承spring-boot-starter-parent,需要像下面一樣設置parent:
<parent> /<parent>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-parent/<artifactid>
<version>2.2.5.RELEASE/<version>
提示
你只需要在該依賴上設置Spring Boog版本即可,在導入其它starters時,可以完全省略版本號.
在你的項目中,你也可以通過覆蓋特定屬性來重設依賴版本.
例如:要升級Spring Data版本,你可以將如下內容添加到你的pom.xml中:
<properties> /<properties>
<spring-data-releasetrain.version>Fowler-SR2/<spring-data-releasetrain.version>
提示
查看spring-boot-dependencies pom(https://github.com/spring-projects/spring-boot/blob/v2.2.5.RELEASE/spring-boot-project/spring-boot-dependencies/pom.xml)
來了解所有受支持的屬性.
1.2.2. 在不繼承Parent POM的情況下使用Spring Boot
並非每個人都喜歡繼承spring-boot-starter-parent POM.
例如:可能你公司存在一套自己的標準parent,或者你想明確地顯示聲明所有Maven配置.
在不使用spring-boot-starter-parent的情況下,也可通過scope=import來享受依賴管理所帶來的好處:
<dependencymanagement> /<dependencymanagement>
<dependencies> /<dependencies>
<dependency> /<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-dependencies/<artifactid>
<version>2.2.5.RELEASE/<version>
<type>pom/<type>
<scope>import/<scope>
注意
上述配置無法通過屬性來覆蓋各個依賴.
要實現覆蓋效果,你必須在spring-boot-dependencies之前添加具體的依賴項.
例如,要升級spring-data-releasetrain版本,可在spring-boot-dependencies之前添加如下依賴:
<dependencymanagement> /<dependencymanagement>
<dependencies> /<dependencies>
<dependency> /<dependency>
<groupid>org.springframework.data/<groupid>
<artifactid>spring-data-releasetrain/<artifactid>
<version>Fowler-SR2/<version>
<type>pom/<type>
<scope>import/<scope>
<dependency> /<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-dependencies/<artifactid>
<version>2.2.5.RELEASE/<version>
<type>pom/<type>
<scope>import/<scope>
提示
在上面的例子中,雖然我們指定的是BOM,但也可使用同樣方法來覆蓋所有依賴類型.
1.2.3. 使用Spring Boot Maven Plugin
Spring Boot提供了一個Maven plugin來將項目打包成可執行jar.
將其加到<plugins>部分就可使用,如下所示:/<plugins>
<build> /<build>
<plugins> /<plugins>
<plugin> /<plugin>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-maven-plugin/<artifactid>
提示
在繼承了Spring Boot starter parent pom的情況下,只添加該plugin就夠了.
不需要配置,除非你想修改parent中定義的相關設置.
1.3. Gradle
要了解如何配套使用Spring Boot和Gradle,可參考Spring Boot的Gradle plugin文檔:
- Reference (HTML and PDF)
- API
1.4. Ant
可以使用Apache Ant+Ivy來構建Spring Boot project.
spring-boot-antlib “AntLib”模塊可幫助Ant來創建可執行jar.
要聲明依賴,可像下面一樣定義一個typical ivy.xml文件:
<ivy-module> /<ivy-module>
<info>
<configurations> /<configurations>
<conf>
<conf>
<dependencies> /<dependencies>
<dependency>
下面是典型的build.xml示例:
<project> /<project>
<property>
<target> /<target>
<retrieve>
<target> /<target>
<path> /<path>
<fileset>
<target> /<target>
<mkdir>
<target> /<target>
<javac>
<target> /<target>
<exejar> /<exejar>
<fileset>
提示
如不想使用spring-boot-antlib 模塊,則可參考howto.html “How-to” .
閱讀更多 Java源 的文章