SpringBoot2.x入門:快速建立一個SpringBoot應用
阿新 • • 發佈:2020-07-01
## 前提
這篇文章是《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.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.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: