SpringBoot快速入門(一)
本文內容
- SpringBoot概述
- SpringBoot快速入門
- SpringBoot起步依賴原理分析
- SpringBoot配置
- SpringBoot整合其他框架
1、SpringBoot概述
1.1、Spring概念
-
SpringBoot提供了一種快速使用Spring的方式,基於約定優於配置的思想,可以讓開發人員不必在配置與邏
輯業務之間進行思維的切換,全身心的投入到邏輯業務的程式碼編寫中,從而大大提高了開發的效率,一定程度
上縮短了專案週期。 2014 年 4 月, Spring Boot 1.0.0 釋出。 Spring的頂級專案之一(https://spring.io)。 -
Spring缺點
- 配置繁瑣
雖然Spring的元件程式碼是輕量級的,但它的配置卻是重量級的。一開始, Spring用XML配置,而且是很多
XML配置。 Spring 2.5引入了基於註解的元件掃描,這消除了大量針對應用程式自身元件的顯式XML配置。Spring 3.0引入了基於Java的配置,這是一種型別安全的可重構配置方式,可以代替XML。
所有這些配置都代表了開發時的損耗。因為在思考Spring特性配置和解決業務問題之間需要進行思維切換,所以編寫配置擠佔了編寫應用程式邏輯的時間。和所有框架一樣, Spring實用,但它要求的回報也不少。 - 依賴繁瑣
專案的依賴管理也是一件耗時耗力的事情。在環境搭建時,需要分析要匯入哪些庫的座標,而且還需要分析匯入與之有依賴關係的其他庫的座標,一旦選錯了依賴的版本,隨之而來的不相容問題就會嚴重阻礙專案的開發進度。
- 配置繁瑣
-
SpringBoot 功能
-
自動配置
Spring Boot的自動配置是一個執行時(更準確地說,是應用程式啟動時)的過程,考慮了眾多因素,才決定Spring配置應該用哪個,不該用哪個。該過程是SpringBoot自動完成的。 -
起步依賴
起步依賴本質上是一個Maven專案物件模型(Project Object Model, POM),定義了對其他庫的傳遞依賴
,這些東西加在一起即支援某項功能。簡單的說,起步依賴就是將具備某種功能的座標打包到一起,並提供一些預設的功能。 -
輔助功能
提供了一些大型專案中常見的非功能性特性,如嵌入式伺服器、安全、指標,健康檢測、外部配置等
-
Spring Boot 並不是對 Spring 功能上的增強,而是提供了一種快速使用 Spring 的方式。
1.2、SpringBoot 快速入門
需求:搭建SpringBoot工程,定義HelloController.hello()方法,返回”Hello SpringBoot!” 。
實現步驟
-
建立Maven專案
-
匯入SpringBoot起步依賴
<!--springboot工程需要繼承的父工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> </parent>
-
定義Controller
@RestController public class HelloController { @RequestMapping("/hello") public String hello(){ return " hello Spring Boot !"; } }
-
編寫引導類
/** * 引導類。 SpringBoot專案的入口 */ @SpringBootApplication public class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class,args); } }
-
啟動測試
小結
- SpringBoot在建立專案時,使用jar的打包方式。
- SpringBoot的引導類,是專案入口,執行main方法就可以啟動專案。
- 使用SpringBoot和Spring構建的專案,業務程式碼編寫方式完全一樣。
1.3、起步依賴原理分析
- spring-boot-starter-parent
- spring-boot-starter-web
小結
- 在spring-boot-starter-parent中定義了各種技術的版本資訊,組合了一套最優搭配的技術版本。
- 在各種starter中,定義了完成該功能需要的座標合集,其中大部分版本資訊來自於父工程。
- 我們的工程繼承parent,引入starter後,通過依賴傳遞,就可以簡單方便獲得需要的jar包,並且不會存在
版本衝突等問題。
1.4、SpringBoot 配置
1.4.1、配置檔案分類
-
SpringBoot是基於約定的,所以很多配置都有預設值,但如果想使用自己的配置替換預設配置的話,就可以使用
application.properties
或者application.yml
(application.yaml
)進行配置-
properties:
server.port=8080
-
yml:
server:
port: 8080
-
-
SpringBoot提供了2種配置檔案型別: properteis和yml/yaml
-
預設配置檔名稱: application
-
在同一級目錄下優先順序為: properties > yml > yaml
1.4.2、yaml
YAML全稱是 YAML Ain't Markup Language 。 YAML是一種直觀的能夠被電腦識別的的資料資料序列化格式,並且容易被人類閱讀,容易和指令碼語言互動的,可以被支援YAML庫的不同的程式語言程式匯入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。 YML檔案是以資料為核心的,比傳統的xml方式更加簡潔。YAML檔案的副檔名可以使用.yml或者.yaml 。
-
properties:
server.port=8080 server.address=127.0.0.1
-
xml:
<server> <port>8080</port> <address>127.0.0.1</address> </server>
-
yml
server: port: 8080 address: 127.0.0.1
簡潔,以資料為核心
-
YAML: 基本語法
- 大小寫敏感
- 資料值前邊必須有空格,作為分隔符
- 使用縮排表示層級關係
- 縮排時不允許使用Tab鍵,只允許使用空格(各個系統 Tab對應的 空格數目可能不同,導致層次混亂)
- 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
-
表示註釋,從這個字元一直到行尾,都會被解析器忽略。
-
YAML:資料格式
-
物件(map):鍵值對的集合。
person: name: zhangsan # 行內寫法 person: {name: zhangsan}
-
陣列:一組按次序排列的值
address: - beijing - shanghai # 行內寫法 address: [beijing,shanghai]
-
純量:單個的、不可再分的值
msg1: 'hello \n world' # 單引忽略轉義字元 msg2: "hello \n world" # 雙引識別轉義字元
-
-
YAML:引數引用
name: lisi person: name: ${name} # 引用上邊定義的name值
小結
- 配置檔案型別
- properties:和以前一樣
- yml/yaml:注意空格
- yaml: 簡潔,以資料為核心
- 基本語法
- 大小寫敏感
- 資料值前邊必須有空格,作為分隔符
- 使用空格縮排表示層級關係,相同縮排表示同一級
- 資料格式
- 物件
- 陣列: 使用 “- ”表示陣列每個元素
- 純量
- 引數引用
- ${key}
- 基本語法
1.4.3、讀取配置檔案內容
- @Value
- Environment
- @ConfigurationProperties
1.4.4、profile
在開發Spring Boot應用時,通常同一套程式會被安裝到不同環境,比如:開發、測試、生產等。其中資料庫地址、伺服器埠等等配置都不同,如果每次打包時,都要修改配置檔案,那麼非常麻煩。 profile功能就是來進行動態配置切換的。
- profile配置方式
- 多profile檔案方式
- yml多文件方式
- profile啟用方式
- 配置檔案
- 虛擬機器引數
- 命令列引數
1.4.5、內部配置載入順序
Springboot程式啟動時,會從以下位置載入配置檔案:
- file:./config/:當前專案下的/config目錄下
- file:./ :當前專案的根目錄
- classpath:/config/: classpath的/config目錄
- classpath:/ : classpath的根目錄
載入順序為上文的排列順序,高優先順序配置的屬性會生效
1.4.6、外部配置載入順序
通過官網檢視外部屬性載入順序:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
1.5、SpringBoot 整合其他框架
程式碼略,之後有空再補