Spring學習系列
Spring學習系列 一
Getting Started
Spring Boot可以和經典的Java開發工具或者命令列工具一起使用,但是無論如何需要有JDK1.8以上的支援。
在開始之前,需要檢查一下你的JDK版本
// check JDK version
$ java -version
1.安裝教程
你可以像使用其他的標準的Java庫一樣來使用Spring Boot,只需要將spring-boot-*.jar檔案適當的包含到你的classpath即可。Spring Boot不需要任何特殊的整合工具,所以你可以使用任何你喜歡的編輯器或者IDE.並且,對於一個Spring Boot應用來說,和其他的Java應用沒有什麼不同。你可以像除錯其他的Java應用程式一樣來除錯你的Spring Boot應用程式。
雖然你完全可以將Spring Boot的jar包拷貝到你的工程目錄然後使用,但我們強烈建議您使用支援依賴管理的構建工具,比如說Maven或者Gradle
JDK安裝
這裡就不說了,網上的教程一搜一大把,注意版本要在1.8以上
Maven安裝
Spring Boot支援Apache Maven3.3以上的版本,安裝指南可以參照這個連結
提示:
如果你使用 OSX:
// Install maven on OSX
$ brew install maven
如果你使用 Ubuntu:
// Install maven on ubuntu
$ sudo apt-get install maven
注意檢查一下版本
// check maven version
$ mvn --version
注意:如果版本低於3.3,則需要手動安裝,和JDK安裝基本一樣,設定好環境變數就OK。
Spring Boot的依賴使用 org.springframework.boot groupId
。典型用法是你的Maven的pom檔案繼承spring-boot-starter-parent
工程並且申明對一個或者多個Starters的依賴。Spring Boot也支援一個可選的Maven外掛來建立可執行的jar包。下面是一個典型的pom.xml
檔案。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
提示
使用spring-boot-starter-parent是使用Spring Boot的很好的方式
2.安裝Spring Boot CLI
Spring Boot CLI(Command Line Interface)是一個你可以快速構建Spring應用的命令列介面i,它讓你可以執行Groovy指令碼。當然了,你也可以不使用Spring Boot CLI,但使用Spring Boot CLI絕對是構建Spring應用的最快方式。
手動安裝
下載連結
下載完成之後解壓縮,在bin目錄下有可執行檔案(win下有.bat檔案)
測試(Linux下)
// test spring Boot CLI
$ ./spring --version
windows下
// test spring Boot CLI
$ .\spring.bat --version
命令列介面測試
首先建立一個名叫app.groovy的檔案,內容如下:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
從命令列執行(Linux)
$ spring run app.groovy
Windows下
$ .\spring.bat run app.groovy
注意:第一次執行需要下載依賴包,需要等待幾分鐘,然後開啟瀏覽器,在位址列輸入 localhost:8080 即可看到如下輸出:
Hello World!
3.建立你的第一個Spring Boot應用
開始之前首先確認一下我們的JDK和Maven都安裝正確了,因為下面將會用到它們。
3.1建立一個專案
新建一個資料夾,名為test1,所有的專案檔案將存放在這個資料夾裡面
3.2建立POM檔案
我們需要首先建立一個Maven的pom.xml檔案。pom.xml檔案是用來構建你的專案的。內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
在test1資料夾下,執行
$ mvn package
Spring Boot提供了很多的Starters來讓你新增jar包到你的calsspath。我們的例程在POM檔案裡面的parent段裡面使用了spring-boot-starter-parent
。spring-boot-starter-parent
是一個特殊的starter,可以提供很多的預設的Maven設定。也提供了一個dependency-management
段,這樣你可以省略version標籤。
當你開發某一特定型別的應用的我時候,其他的starter提供了你可能需要的依賴。因為我們是在開發一個web應用
,我們新增一個spring-boot-starter-web
依賴。在那之前,我們可以通過執行下面的命令來看一看我們現在有些什麼:
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree
命令列印了你的專案依賴的一個樹形描述。你可以看到spring-boot-starter-parent
自己沒有提供依賴。如果要新增依賴,編輯你的pom.xml。在parent
段下面新增spring-boot-starter-web
依賴。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
再次執行$ mvn dependency:tree
你就可以看到很多額外的依賴,包括Tomcat web server和Spring Boot自己。
3.3 編寫程式碼
在test1資料夾下建立src/main/java/Example.java檔案,內容如下:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
儘管這裡的程式碼不多,但是後面卻有很多東西在執行。我們將在下面進行分析。
3.3.1 @RestController 和 @RequestMapping 註解
我們的Example類中的第一個註解是@RestController
.這是一個被稱為原型的註解。作用是告訴閱讀程式碼的人,這個類扮演著一個特殊的角色。在本例中,我們的類是一個web @Controller,所以再有web請求的時候,Spring就會考慮到它。
我們的 @RequestMapping
註解提供了一個路由的資訊。它告訴Spring,任何帶有/
的HTTP請求都應該被對映到home
方法。@RestController
註解告訴Spring將結果直接返回給呼叫者。
注意:這裡的 @RestController
和RequestMapping
註解都是Spring MVC的註解。
3.3.2 @EnableAutoConfiguration 註解
第二個類級別的註解是@EnableAutoConfiguration
。這個註解告訴Spring Boot,基於你新增的jar包的依賴,去“猜測”你將如何配置你的Spring。由於spring-boot-starter-web
添加了Tomcat和SpringMVC,自動配置將認為你是在開發一個web應用並將為之設定Spring.
Starters 和Auto-configuration
Auto-configuration被用來和Starters更好的工作,但是這兩個概念並不是直接聯絡在一起的。你可以選擇Starter之外的jar包依賴.Spring-Boot任然會竭盡全力為你繳納自動配置好你的應用。
3.3.3 main方法
我們的應用的最後一個部分就是main方法。我們的main方法通過呼叫run方法來呼叫Spring Boot的SpringApplication
.SpringApplication
將會啟動我們的應用,啟動Spring,Spring會啟動自動配置好的Tomcat。我們需要將Example.class作為一個引數傳遞給run方法,告訴SpringApplication哪一個是基本的Spring單元。args也傳遞過去以曝露任何需要的命令列引數。
3.4執行例程
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
開啟瀏覽器,訪問localhost:8080,將會開到如下輸出:
Hello World !
3.5建立一個可執行的jar包
在最後,我們將建立一個可以在生產環境中執行的jar包來結束例程。可執行jar包(有時候被稱為“fat jars”)是包含著編譯好的類和依賴的jar包的檔案集合。
可執行jar包和Java
Java並不提供一個標準的方法來載入遞迴的jar包(本身包含jar包的jar包)。如果你需要一個自我包含的發行版的應用的話就有問題了。
為了解決這個問題,很多開發者使用“uber”jar包。“uber”jar包指的是將應用依賴的所有的類都打包到一個集合。這種方法的問題就在於很難看清楚你的應用裡賣弄有哪些類庫。如果使用了同一個類名(內容不同)會帶來問題。
Spring Boot採取了不同的方式,讓你可以直接遞迴使用你都jar包。
為了建立一個可執行的jar包,我們需要將spring-boot-maven-plugin
加入到我們的pom.xml
中。只需要將下面的內容新增到dependencies
段的下面。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
注意:我們的spring-boot-starter-parent
POM已經包含了<executions>
配置來繫結repackage
目標。如果你不使用parent POM,你就需要自己申明這個配置。具體可以參看配置文件。
儲存pom.xml
,執行 mvn package
命令。
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.0.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
此時,你會發現你的test1/target資料夾下,會出現一個myproject-0.0.1-SNAPSHOT.jar,十多MB大小,想看裡面的內容,使用:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
在target資料夾下,可以看到一個小得多的檔案 myproject-0.0.1-SNAPSHOT.jar.original
這是Spring重新打包之前maven之前建立的。
執行這個應用,需要使用java -jar命令:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.0.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
參考:
[1]https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-documentation