Spring Boot簡單介紹
Spring Boot用于建立可運作的、獨立的、生産級的基于Spring的應用程式。Spring Boot對Spring和第三方庫持約定大于配置的觀念,以便可以輕松上手。大多數Spring Boot應用程式隻需要很少的配置。
Spring Boot可以通過使用java -jar或更傳統的war包部署來啟動Java應用程式
Spring Boot的目标是:
- 為所有Spring開發提供從根本上更快且可廣泛通路的體驗。
- 開箱即用。
- 提供一系列大型項目通用的非功能特性(例如嵌入式伺服器、安全性、名額、健康檢查和外部化配置)。
- 沒有代碼生成,也不需要XML配置。
我們使用Spring Boot的好處:
- Spring Boot的元件自動裝配,可以讓開發人員專注于核心業務開發。
- 他的外部化配置,可以讓程式一次建構、按需調配,到處運作。
- 嵌入式容器,無需部署即可獨立運作
- Spring Boot Starter簡化了依賴、按需裝配
- Production-Ready :一站式運維、生态無縫結合,應用程式推送到生産環境時對其進行監視和管理
系統要求
Spring Boot 2.6.2需要Java 8,并且相容Java 17(包括Java 17 ),還需要Spring Framework 5.3.14或更高版本,這裡采用Spring Boot 2.6.2,它是目前最新的正式版。
Spring Boot為以下建構工具提供了顯式建構支援:
- Maven 3.5+
- Gradle 6.8.x 6.9.x and 7.x
Servlet 容器
Spring Boot支援如下圖所示的嵌入式Servlet容器:
可以将Spring Boot應用程式部署到任何相容Servlet 3.1+的容器。
基本結構
使用Spring Initializr來建構Spring Boot應用,也可以使用Maven建構Spring Boot項目
選擇依賴和Spring Boot版本,這裡添加基本的web依賴,來寫一些基礎的web服務。
以下是生成的Spring Boot項目,大緻結構如下所示
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.6.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xt</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>springboot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我們可以檢視maven的依賴檔案
這是他的依賴圖,可以自己在IDEA裡面檢視
啟動類(SpringbootApplication)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
@SpringBootApplication是一個友善的注解,它添加了以下所有内容:
- @Configuration:将類标記為應用程式上下文的bean定義的源。
- @EnableAutoConfiguration:告訴Spring Boot開始根據類路徑設定、其他bean和各種property設定添加bean。例如,如果spring-webmvc在類路徑上,這個注解将該應用标記為一個web應用程式,并激活關鍵行為,比如設定一個DispatcherServlet。
- @ComponentScan:告訴Spring在com.xt包中尋找其他元件、配置和服務,讓它找到控制器。
main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程式。您注意到沒有一行XML嗎?也沒有web.xml檔案。這個web應用程式是100%純Java的,你不需要配置任何基礎設定。
點選run運作spring boot,啟動成功,如下圖所示:
預設情況下,會顯示INFO日志消息,包括一些相關的啟動細節,比如啟動應用程式的使用者。如果您需要設定除INFO之外的日志級别,請參見日志級别進行設定。應用程式版本是使用來自主應用程式類包的實作版本來确定的。
web服務運作在Tomcat容器中,DispatcherServlet是一種Servlet實作,可以用于将請求派發給指定的控制器中定義的接口
基本使用(建構 RESTful Web 服務)
隻需要編寫如下兩個檔案
建立資源表示類(Greeting類)
我們建立一個entity檔案夾來存放實體類。
寫入如下Greeting類:
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
spring boot應用程式使用Jackson JSON庫将類型為Greeting的執行個體自動封裝為JSON。Jackson由web starter預設包括。
建立資源控制器(GreetingController類)
建立controller檔案夾,存放控制器
在Spring建構RESTful web服務的方法中,HTTP請求由控制器處理。這些元件由@RestController注解辨別。
GreetingController如下所示,通過傳回greeting類的一個新執行個體來處理/greeting的GET請求:
package com.xt.springboot.controller;
import com.xt.springboot.entity.Greeting;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.atomic.AtomicLong;
/**
* @Author: codingXT
* @Date: 2022-01-20-19:19
* @Description:
*/
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
@GetMapping注解確定到/greeting的HTTP GET請求映射到greeting()方法。
對于其他HTTP動詞也有相應的注解(例如對于POST的@PostMapping)。還有一個@RequestMapping注解,它們都是從它派生的,可以作為同義詞(例如@RequestMapping(method=GET)等同于@GetMapping)。
@RequestParam将查詢字元串參數name的值綁定到greeting()方法的name參數中。如果請求中沒有name參數,則使用defaultValue,這裡是World。
傳統MVC控制器和前面展示的RESTful web服務控制器之間的一個關鍵差別是建立HTTP響應體的方式。這個RESTful web服務控制器填充并傳回一個greeting對象, 對象資料将作為JSON直接寫入HTTP響應。而不是依靠視圖view技術将greeting資料在伺服器端呈現為HTML。
這段代碼使用了Spring @RestController注解,它将類标記為一個控制器,其中每個方法傳回一個domain對象,而不是一個視圖view。它包含@Controller(帶有此注解的類型被視為控制器)和@ResponseBody(訓示方法的傳回值應綁定到Web響應的Body中)兩個注解。
Greeting對象必須轉換為JSON。由于Spring的HTTP消息轉換器支援,您不需要手動執行此轉換。因為Jackson2在類路徑上,Spring的MappingJackson2HttpMessageConverter被自動選擇來将Greeting執行個體轉換為JSON。
測試運作
在浏覽器輸入
http://localhost:8080/greeting
通過通路http://localhost:8080/greeting?name=xt 提供名稱查詢字元串參數。
http://localhost:8080/greeting?name=xt
References:
- https://spring.io/guides/gs/rest-service/
- https://docs.spring.io/spring-boot/docs/2.6.2/reference/htmlsingle/#getting-started
- https://docs.spring.io/spring-boot/docs/current/reference/html/features.html