在本文中,主要內容包括什麼是Spring Boot,優點,主要功能以及使用Spring Boot創建一個簡單的應用程式。
Spring Boot是什麼?
Spring Boot是對Spring Framework的增強和擴展,它極大的消除了使用Spring Framework時所需的大量樣板代碼的配置,與此同時,Spring Boot提供的很多Starter能讓開發人員更快的完成系統的開發。
Spring Boot主要的優勢
相比於Spring Framework,使用Spring Boot能為開發者帶來以下優勢:
- 為使用Spring Framework帶來更好的體驗
- 開箱即用,Spring Boot提供了大量的默認配置,根據需求,開發者可以很輕鬆覆蓋原有配置
- 提供了一些列優秀的功能插件,如嵌入式伺服器,安全檢查,系統指標,運行狀況檢查以及外部化配置
- 推薦基於Java代碼的配置方式,可以很少或完全不使用XML配置應用
Spring Boot的核心功能
與Spring Framework相比較,下面列舉Spring Boot的一些核心功能,Spring Boot的功能不局限於下面所列舉:
- Spring Boot Starters
- Spring Boot AutoConfiguration
- 優雅的配置管理
- Spring Boot Actuator
- 易於使用的嵌入式Servlet容器
接下來,將詳細說明Spring Boot的核心功能。
1. Spring Boot Starters
Spring Boot提供了許多開箱即用的Starter模塊,例如Spring MVC,JPA,MySQL,Spring Security,Solor,Hibernate,Freemarker等等。這些Starter已經預先配置好了最常用的依賴庫,因此你不必像使用Spring那樣去考慮各依賴庫之間的版本兼容問題。
如果你希望在項目中使用Hibernate框架且基於JPA實現,你只需要在pom文件中加入spring-boot-starter-data-jpa即可,Spring Boot會自動加載所需要的依賴庫。
2. Spring Boot AutoConfiguration
Spring Boot另一個革命性的功能是自動配置,有了自動配置功能,你可以摒棄之前使用XML手動配置應用的方式,通過幾行代碼,即可完成應用系統複雜的配置工作。
Spring Boot會自動根據某些特定的條件自動完成Bean的註冊工作,下面是觸發Spring Boot完成自動注入的一些條件:
- 當類路徑下存在特定的且可用的類時
- 當Spring Bean存在/不存在時
- 當存在特定的系統屬性時
- 當缺少配置文件時
例如,當你的項目中存在spring-mvc的依賴庫時,Spring Boot會猜測你將構建一個基於Spring MVC的Web應用程式,在你未編寫任何代碼前,Spring Boot會嘗試註冊一個默認的DispatcherServlet。如果你的類路徑下包含得有任何嵌入式資料庫驅動程序(H2或HSQL),在未顯示配置DataSource前,Spring Boot會自動配置一個DataSource得Bean。
3. 優雅的配置管理
Spring Boot支持使用@PropertySource註解完成外部化可配置屬性。使用Spring Boot的配置鍵值對,可以將鍵值對與Bean屬性進行綁定,另外,Spring Boot還提供為不同環境提供針對性的配置文件,你只需要簡單的幾行代碼即可完成配置管理。
4. Spring Boot Actuator
很多時候,我們都需要去收集在生產環境中運行的應用程式的諸多性能參數,而Spring Boot Actuator已經為我們提供了類似的許多功能,我們無需編寫大量的代碼,只需簡單的一些配置,便可監控我們的應用程式,收集指標數據,了解URL請求狀況等。例如,我們可以通過引入Spring Boot Actuator而獲得如下的一些便利:
- 獲取應用程式中所有Spring Bean的詳細信息
- 獲取應用程式運行狀況信息
- 獲取HTTP跟蹤信息
- 獲取應用程式日誌信息
- 獲取應用程式中的計劃任務信息
- 獲取應用程式中的路徑映射列表信息(Web應用)
5. 易於使用的嵌入式Servlet容器
以往,我們在構建Web應用程式時,需要手動創建WAR類型的程序包,然後將其部署到外部伺服器(例如Tomcat)上才可以運行應用程式,現在,當你使用Spring Boot時,你可以很方便的創建JAR類型的程序包,且該類型的程序包已經內嵌了Servlet容器,你可以在不依賴於外部伺服器的情況下運行Web應用程式。
6. 系統要求
Spring Boot 2.2.2.RELEASE最低要求Java 8,同時也支持Java 13。此外,還需要Spring Framework 5.2.2.RELEASE或更高的版本。
6.1 構建工具本版
在開始使用Spring Boot 2.2.2之前,你應該先檢查本地的構建工具是否滿足以下的配置要求:
6.2 Servlet容器
Spring Boot 2.2.2支持以下的嵌入式Servlet容器:
除此之外,你還可以將Spring Boot應用程式打包為WAR包,部署到支持Servlet 3.1及以上版本的外部容器中。
7. 為什麼使用Spring Boot?
與直接使用Spring相比,使用Spring Boot你將如下的一些優勢(不局限於列舉範圍):
- 開發基於Spring的應用變得更簡單容易
- 開箱即用的特性減少的開發時間,提高了開發效率
- Spring Boot避免了大量的樣板代碼和XML配置
- 能夠很輕鬆的與其他Spring生態系統集成(例如Spring JDBC,Spring ORM,Spring Data,Spring Security)
- Spring Boot的自動注入能夠幫助開發人員減少工作量
- Spring Boot提供了嵌入式的Servlet容器,方便開發人員對應用進行測試
8.編寫第一個Spring Boot應用程式
本小節將基於Java 8 和Maven 3.0+構建一個簡單的Spring Boot Web應用程式,通過瀏覽器訪問http://localhost:8080 ,在頁面中輸出」Hello Spring Boot「語句。
在開始編寫應用程式之前,先檢查本地環境是否滿足開發要求。首先,打開作業系統終端,檢查Java的版本信息,以Microsoft Windows 10 為例:
然後,在終端輸入mvn -v檢查Maven的版本信息
8.1 創建POM
首先,我們需要創建一個工程目錄spring-boot-firstapp,然後在其目錄下創建一個Maven 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ramostear</groupId>
<artifactId>spring-boot-firstapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-firstapp</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
最後,打開你的作業系統終端,導航到spring-boot-firstapp目錄下,執行mvn package命令進行測試,執行此命令後,spring-boot-firstapp目錄下會生成多個文件夾:
spring-boot-firstapp
├─src
├─main
│ ├─java
│ │ └─com
│ │ └─ramostear
│ │ └─springbootfirstapp
│ │ SpringBootFirstappApplication.java
│ │
│ └─resources
│ application.properties
│
└─test
└─java
└─com
└─ramostear
└─springbootfirstapp
└─SpringBootFirstappApplicationTests.java
8.2 添加Web依賴
由於我們要創建一個Web應用程式,因此需要向pom文件中加入相關的web依賴。現在我們使用spring boot構建web應用程式,只需在pom文件的dependencies節點中加入如下的依賴即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在這裡,你會發現我們並沒有填寫spring-boot-starter-web依賴庫的版本號,該依賴庫的版本將由spring-boot-starter-parent統一管理。
8.3 編寫代碼
現在,我們要創建一個Java文件,完成向瀏覽器頁面輸入」Hello Spring Boot「的功能。在src/main/java/com/ramostear/springbootfirstapp目錄下創建一個名為HelloSpringBoot.java的文件,並用你喜歡的文本編輯器打開文件並寫入以下代碼:
package com.ramostear.springbootfirstapp;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName HelloSpringBoot
* @Description TODO
* @Author ramostear
* @Date 2020/1/7 0007 15:19
* @Version 1.0
**/
@RestController
public class HelloSpringBoot {
@GetMapping("/")
public String sayHello(){
return "Hello Spring Boot";
}
}
RestController註解會將字符串」Hello Spring Boot「直接返回到頁面,而不是返回一個視圖;GetMapping時RequestMapping的一種簡寫。
8.4 運行示例
由於使用了spring-boot-starter-parent依賴,因此可以在終端使用mvn spring-boot:run命令來運行本次示例,命令執行成功後,你可以在控制台查看到以下的輸出:
mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
...
2020-01-07 15:26:04.868 INFO 3100 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
...
現在,你可以打開瀏覽器並輸入http://localhost:8080,你可以在頁面上觀察到如下的信息: