1. 程式人生 > >SpringBoot2.x入門:快速建立一個SpringBoot應用

SpringBoot2.x入門:快速建立一個SpringBoot應用

## 前提 這篇文章是《SpringBoot2.x入門》專輯的**第2篇**文章,使用的`SpringBoot`版本為`2.3.1.RELEASE`,`JDK`版本為`1.8`。 常規的套路會建議使用`Spring`官方提供的工具[Spring Initializr](https://start.spring.io)通過指定配置建立一個`SpringBoot`專案,但是考慮到**Spring Initializr必須聯網使用**,對於專案配置和依賴的控制粒度不夠精細,本文會從更一般的情況考慮,詳細分析怎麼通過`Maven`和`IntelliJ IDEA`(下稱`IDEA`)快速建立一個`SpringBoot`應用,包括單模組的`Maven`和多模組的`Maven`應用建立。 ## 依賴分析 必要的外掛: - `Maven`編譯外掛:`maven-compiler-plugin`。 - `SpringBoot`封裝的`Maven`外掛(一般必選,專案最終打包依賴到這個外掛,**它的版本建議跟隨選用的SpringBoot的版本**):`spring-boot-maven-plugin`。 `Maven`編譯外掛儘可能選用高版本,以適配更高版本的`JDK`。一般會選用的基本依賴如下: - `lombok`(可選,個人認為能提高開發效率,不過需要安裝對應的外掛)。 - `junit`(`spring-boot-starter-test`):單元測試。 - `spring-boot-starter`:`Bean`管理、配置讀取等,簡單理解就是`IOC`容器核心元件和一些擴充套件。 - `spring-boot-starter-web`:基於`spring-boot-starter`擴充套件,主要集成了`SpringMVC`的功能。 > 多數情況下,選用spring-boot-starter-web即可,版本選取REALEASE版本即可,注意儘可能整套專案使用同一個大版本的SpringBoot。 下面例子用到的各個元件的版本如下: |序號|元件|版本號|描述| |:-:|:-:|:-:|:-:| |1|`maven-compiler-plugin`|`3.8.1`|`Maven`編譯外掛| |2|`spring-boot-starter`|`2.3.1.RELEASE`|`IOC`容器核心元件| |3|`spring-boot-maven-plugin`|`2.3.1.RELEASE`|`SpringBoot`封裝的`Maven`外掛| |4|`lombok`|`1.18.12`|-| ## 建立一個單模組的SpringBoot應用 點選`IDEA`主選單`File -> Project`進入建立新專案的介面: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-1.png) 選擇左側的`Maven`選項,上方下拉選擇好`JDK`版本,勾選`Create from archetype`,然後選中`maven-archetype-webapp`這個骨架的`RELEASE`版本,然後點選**下一步**按鈕: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-2.png) 輸入專案的`GAV`,選定專案的磁碟目錄,然後點選**下一步**按鈕: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-3.png) 選定`Maven`的安裝路徑、配置檔案和本地倉庫,配置好相應的屬性,最後點選完成即可: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-4.png) 創建出來的是一個標準的`Maven`專案,它的結構如下: ```java spring-boot-guide - src - main - webapp - web.xml - pom.xml ``` 一般可以直接刪除`src/main/webapp`目錄,在`pom.xml`中增加對應的依賴,最終的`pom.xml`如下: ```xml
4.0.0 club.throwable spring-boot-guide 1.0-SNAPSHOT jar spring-boot-guide UTF-8 1.8 1.8 3.8.1 1.18.12 2.3.1.RELEASE org.springframework.boot spring-boot-dependencies ${spring.boot.version}
import pom
org.projectlombok lombok ${lombok.version} provided org.springframework.boot spring-boot-starter org.springframework.boot
spring-boot-starter-test test
spring-boot-guide org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.plugin.version} ${maven.compiler.source} ${maven.compiler.target ${project.build.sourceEncoding} org.springframework.boot spring-boot-maven-plugin ${spring.boot.version} repackage
``` 有依賴版本變動,只需要直接修改`properties`元素中對應的版本號即可。在`src/main`下新建啟動類`java/club/throwable/App.java`: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-5.png) ```java import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @Slf4j @SpringBootApplication public class App implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(App.class, args); } @Override public void run(String... args) throws Exception { log.info("Hello SpringBoot!"); } } ``` 啟動`App`中的`main`函式後輸出如下: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-6.png) `spring-boot-starter`模組引入的只是核心容器元件,並沒有整合像`Tomcat`這樣的`Servlet`容器,啟動後不會掛起主執行緒,所以執行完`CommandLineRunner`中的邏輯就會自行退出主執行緒。 ## 建立一個多模組的SpringBoot應用 多模組應用的建立基於單模組應用,準確來說就是在一個建立完的單模組應用中新增新的模組(`New Module`)。在原來的根專案`spring-boot-guide`右鍵彈出選單中選擇新建模組: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-7.png) 後續的步驟與上一小節的過程完全相同,不過定義的模組名稱必須和根專案的名稱不相同,這裡定義為`ch0-dependency`,然後調整父`pom.xml`和子`pom.xml`: - `spring-boot-guide -> pom.xml` ```xml 4.0.0 club.throwable spring-boot-guide 1.0-SNAPSHOT ch0-dependency pom spring-boot-guide UTF-8 1.8 1.8 3.8.1 1.18.12 2.3.1.RELEASE org.springframework.boot spring-boot-dependencies ${spring.boot.version} import pom org.projectlombok lombok ${lombok.version} provided org.springframework.boot spring-boot-starter-test test spring-boot-guide org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.plugin.version} ${maven.compiler.source} ${maven.compiler.target ${project.build.sourceEncoding} ``` - `spring-boot-guide/ch0-dependency -> pom.xml` ```xml 4.0.0 club.throwable spring-boot-guide 1.0-SNAPSHOT ch0-dependency 1.0-SNAPSHOT jar ch0-dependency org.springframework.boot spring-boot-starter ch0-dependency org.springframework.boot spring-boot-maven-plugin ${spring.boot.version} repackage ``` 注意: - `spring-boot-maven-plugin`一般情況下只需配置在需要打包的模組中,一般父模組是全域性管理的模組,不需要全域性定義此外掛。 - `maven-compiler-plugin`可以配置在父模組中,讓所有子模組都應用此外掛。 - `spring-boot-starter-test`和`lombok`可以在父模組的`dependencies`元素中新增,相當於所有子模組都引入了這兩個依賴。 父模組中的`spring-boot-guide`的`src`模組需要丟棄,可以直接剪下到`ch0-dependency`子模組中,如下: ![](https://throwable-blog-1256189093.cos.ap-guangzhou.myqcloud.com/202006/s-b-g-ch1-8.png) 後面再新增其他新的模組,直接重複上述的步驟即可。 ## 程式碼倉庫 這裡給出本文搭建的一個多模組的`SpringBoot`應用的倉庫地址(持續更新): - Github:https://github.com/zjcscut/spring-boot-guide (本文完 c-2-d e-a-20200701 8: