微服務SpringBoot總結
什麼是SpringBoot
SpringBoot是Spring專案中的一個子工程,與我們所熟知的Spring-framework 同屬於spring的產品
官方介紹:
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.
為什麼要學習SpringBoot
java一直被人詬病的一點就是臃腫、麻煩。當我們還在辛苦的搭建專案時,可能Python程式設計師已經把功能寫好了,究其原因主要是兩點:
複雜的配置
專案各種配置其實是開發時的損耗, 因為在思考 Spring 特性配置和解決業務問題之間需要進行思維切換,所以寫配置擠佔了寫應用程式邏輯的時間。
混亂的依賴管理
專案的依賴管理也是件吃力不討好的事情。決定專案裡要用哪些庫就已經夠讓人頭痛的了,你還要知道這些庫的哪個版本和其他庫不會有衝突,這也是件棘手的問題。並且,依賴管理也是一種損耗,新增依賴不是寫應用程式程式碼。一旦選錯了依賴的版本,隨之而來的不相容問題毫無疑問會是生產力殺手。
SpringBoot的特點
Spring Boot 主要特徵是:
建立獨立的spring應用程式
直接內嵌tomcat、jetty和undertow(不需要打包成war包部署)
提供了固定化的“starter”配置,以簡化構建配置
儘可能的自動配置spring和第三方庫
提供產品級的功能,如:安全指標、執行狀況監測和外部化配置等
絕對不會生成程式碼,並且不需要XML配置
總之,Spring Boot為所有 Spring 的開發者提供一個開箱即用的、非常快速的、廣泛接受的入門體驗
更多細節,大家可以到官網檢視。
SpringBoot快速入門
方式一:Maven 構建專案
2、選擇構建工具 Maven Project、Java、Spring Boot 版本 2.1.3 以及一些工程基本資訊,可參考下圖所示:
3、點選 Generate Project 下載專案壓縮包
4、解壓後,使用 Idea 匯入專案,File -> New -> Model from Existing Source… -> 選擇解壓後的資料夾 -> OK,選擇 Maven 一路 Next,OK done!
5、如果使用的是 Eclipse,Import -> Existing Maven Projects -> Next -> 選擇解壓後的資料夾 -> Finsh,OK done!
方式二:Idea 構建專案
1、環境要求:
2、Idea 建立一個空的demo工程,然後在工程中建立moduel(maven跳過骨架)
3、引入依賴:SpringBoot如何幫助我們管理依賴?
SpringBoot提供了一個名為spring-boot-starter-parent的工程,裡面已經對各種常用依賴(並非全部)的版本進行了管理,我們的專案需要以這個專案為父工程,這樣我們就不用操心依賴的版本問題了,需要什麼依賴,直接引入座標即可
新增父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
新增啟動器
為了讓SpringBoot幫我們完成各種自動配置,我們必須引入SpringBoot提供的自動配置依賴,我們稱為啟動器。spring-boot-starter-parent工程將依賴關係宣告為一個或者多個啟動器,我們可以根據專案需求引入相應的啟動器,因為我們是web專案,這裡我們引入web啟動器:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
這個時候,我們會發現專案中多出了大量的依賴,這些都是SpringBoot根據spring-boot-starter-web這個依賴自動引入的,而且所有的版本都已經管理好,不會出現衝突。
完整的POM
<?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.ityang.springboot</groupId>
<artifactId>ityang-springboot</artifactId>
<version>1.0.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
4、新增全域性的啟動類:如果單獨的寫在一個個Controller裡面,無法啟動多個Controller,每個main方法都監聽8080埠。所以單獨寫出做一些框架配置
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5、編寫HelloController
@RestController
public class HelloController {
@GetMapping("show")
public String test(){
return "hello Spring Boot!";
}
}
6、訪問localhost:8080/show,測試
spingboot建議的目錄結果如下(root package結構:com.example.myproject)
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- controller
| +- CustomerController.java
|
註解分析
1、@EnableAutoConfiguration
註解說明:開啟spring應用程式的自動配置,SpringBoot基於你所新增的依賴和你自己定義的bean,試圖去猜測並配置你想要的配置。比如我們引入了spring-boot-starter-web,而這個啟動器中幫我們添加了tomcat、SpringMVC的依賴。此時自動配置就知道你是要開發一個web應用,所以就幫你完成了web及SpringMVC的預設配置了!
2、@ComponentScan
註解說明:配置元件掃描的指令。提供了類似與<context:component-scan>標籤的作用,通過basePackageClasses或者basePackages屬性來指定要掃描的包。如果沒有指定這些屬性,那麼將從宣告這個註解的類所在的包開始,掃描包及子包。
我們的@ComponentScan註解宣告的類就是main函式所在的啟動類,因此掃描的包是該類所在包及其子包。一般啟動類會放在一個比較淺的包目錄中。
3、@SpringBootApplication
它其實是一個組合註解,這裡重點的註解有3個:
@SpringBootConfiguration
@EnableAutoConfiguration:開啟自動配置
@ComponentScan:開啟註解掃描
4、@SpringBootConfiguration
通過檢視註解的原始碼,發現在這個註解上面,又有一個@Configuration註解。通過上面的註釋閱讀我們知道:這個註解的作用就是聲明當前類是一個配置類,然後Spring會自動掃描到添加了@Configuration的類,並且讀取其中的配置資訊。而@SpringBootConfiguration是來聲明當前類是SpringBoot應用的配置類,專案中只能有一個。所以一般我們無需自己添