【Java架構:基礎技術】一篇文章搞掂:Spring Boot

本文篇幅較長,建議合理利用右上角目錄進行查看(若是沒有目錄請刷新)。java

本文是對《Spring Boot 實戰第4版》的總結,你們也能夠去仔細研讀該書web

注意,書中使用的Spring Boot版本並非2.0,可是我這裏的代碼是基於Spring Boot2.0的,有一些地方會有出入spring

1、入門

1.一、Spring Boot的出現

Spring的發展與現狀

  • Spring誕生時是Java企業版(Java Enterprise Edition,JEE,也稱J2EE)的輕量級代替品
  • Spring經過依賴注入和麪向切面編程,用簡單的Java對象(Plain Old Java Object,POJO)實現了EJB的功能
  • Spring雖然代碼組件輕量級,可是配置是重量級的
  • Spring一開始用XML配置,一個Spring項目中須要設計大量顯式XML配置
  • Spring3.0後引入Java配置,一種類型安全的可重構配置方式以替代XML,可是仍然是須要大量配置
  • 設計這些配置都須要消耗大量開發時間
  • 並且項目中依賴管理也是一個損耗開發時間的大問題

建立一個Spring Web項目的流程

  • 一個項目結構,其中有一個包含必要依賴的Maven或者Gradle構建文件,最起碼要有Spring
  • MVC和Servlet API這些依賴。
  • 一個web.xml文件(或者一個 WebApplicationInitializer 實現),其中聲明瞭Spring
  • 的 DispatcherServlet 。
  • 一個啓用了Spring MVC的Spring配置。
  • 一個控制器類,以「Hello World」響應HTTP請求。
  • 一個用於部署應用程序的Web應用服務器,好比Tomcat。

建立一個Spring Boot Web項目的例子

使用Groovy代碼編寫HelloWorld.groovy文件shell

@RestController class HelloController { @RequestMapping("/") def hello() { return "Hello World" } }

使用Spring Boot的命令行界面(Command Line Interface,CLI)運行數據庫

$ spring run HelloController.groovyapache

這個web程序便可正常運行編程

Spring Boot的4個核心內容

自動配置bootstrap

針對不少Spring應用程序常見的應用功能,Spring Boot能自動提供相關配置tomcat

例如:經過JDBC訪問一個關係型數據庫安全

Spring:須要手動建立JdbcTemplate Bean和DataSource Bean

Spring Boot:檢測到Classpath中有JdbcTemplate,自動建立JdbcTemplate Bean

詳見第二章

起步依賴

告訴Spring Boot須要什麼功能,它就能引入須要的庫

例如:但願用Spring MVC構造一個REST API,並將JSON(JavaScript Object Notation)做爲資源表述。此外,還想運用遵循JSR-303規範的聲明式校驗,並使用嵌入式的Tomcat服務器來提供服務

Spring:引入至少8個依賴

  • org.springframework:spring-core
  • org.springframework:spring-web
  • org.springframework:spring-webmvc
  • com.fasterxml.jackson.core:jackson-databind
  • org.hibernate:hibernate-validator
  • org.apache.tomcat.embed:tomcat-embed-core
  • org.apache.tomcat.embed:tomcat-embed-el
  • org.apache.tomcat.embed:tomcat-embed-logging-juli

Spring Boot:引入一個起步依賴,告訴Spring Boot即將建立Web程序,Spring Boot會自動加入所需依賴

  • org.springframework.boot:spring-boot-starter-web

Spring Boot會管理好這些庫之間的版本關係,不會出現不兼容的狀況

命令行界面

這是Spring Boot的可選特性,藉此你只需寫代碼就能完成完整的應用程序,無需傳統項目構建

像上面的Spring Boot項目示例代碼中,代碼沒有import,Spring Boot CLI卻能指導RequestMapping和RestController來自哪一個包

CLI能檢測到你使用了哪些類,它知道要向Classpath中添加哪些起步依賴才能讓它運轉起來。一旦那些依賴出如今Classpath中,一系列自動配置就會接踵而來,確保啓用DispatcherServlet 和Spring MVC,這樣控制器就能響應HTTP請求

Spring Boot CLI是Spring Boot的非必要部分,雖大大簡化了開發,可是引入了一套不太常規的開發模型

若是不喜歡或者不須要這種開發模式,也能夠拋棄Spring Boot的這個部分

Actuator

提供在運行時檢視Spring Boot應用程序內部狀況的能力,內容包括:

  • Spring應用程序上下文裏配置的Bean
  • Spring Boot的自動配置作的決策
  • 應用程序取到的環境變量、系統屬性、配置屬性和命令行參數
  • 應用程序裏線程的當前狀態
  • 應用程序最近處理過的HTTP請求的追蹤狀況
  • 各類和內存用量、垃圾回收、Web請求以及數據源用量相關的指標

Actuator經過Web端點和shell界面向外界提供信息。若是要藉助shell界面,你能夠打開SSH(Secure Shell),登入運行中的應用程序,發送指令查看它的狀況

根本上說,Spring Boot項目只不過是一個普通的Spring項目,只是使用了Spring Boot的起步依賴和自動配置

1.二、Spring Boot入門

如何建立Spring Boot項目

一、使用Spring Boot CLI(暫略)

幾種安裝方法:

  • 用下載的分發包進行安裝
  • 用Groovy Environment Manager進行安裝
  • 經過OS X Homebrew進行安裝
  • 使用MacPorts進行安裝

二、Spring Initializr初始化Spring Boot項目

若是仍是但願使用傳統Java項目結構來開發項目,則能夠採起這種方式

Spring Initializr的幾種使用方法(具體使用方法暫略):

  • 經過Web界面使用
  • 經過Spring Tool Suite使用
  • 經過IntelliJ IDEA使用
  • 使用Spring Boot CLI使用

三、使用IntelliJ IDEA中Spring Initializr建立一個Spring Boot項目的項目結構簡介

實際生成的項目,也是一個普通的Spring項目

內容包括:

  • 主程序:DemoApplication.java
  • 測試程序:DemoApplicationTests.java
  • Maven依賴文件:pom.xml
    • 父依賴:spring-boot-starter-parent
    • web起步依賴:spring-boot-starter-web
    • 測試起步依賴:spring-boot-starter-test

其中:

主程序使用了@SpringBootApplication註解,使得此「普通的Spring項目」以Spring Boot的形式運行

測試程序使用了@SpringBootTest註解,使得單元測試可以支持Spring Boot的形式

2、開發一個Spring Boot應用

2.一、運用Spring Boot

一、項目結構詳解

  • pom.xml:Maven構建說明文件。
  • DemoApplication.java :應用程序的啓動引導類(bootstrap class),也是主要的Spring配置類。
  • application.properties :用於配置應用程序和Spring Boot的屬性。
  • DemoApplicationTests.java :一個基本的集成測試類。

啓動引導Spring

@SpringBootApplication開啓了Spring的組件掃描和Spring Boot的自動配置功能

實際上,@SpringBootApplication將三個有用的註解組合在了一塊兒

  • Spring的@Configuration:標明該類使用Spring基於Java的配置。
  • Spring的@ComponentScan:啓用組件掃描,這樣你寫的Web控制器類和其餘組件才能被自動發現並註冊爲Spring應用程序上下文裏的Bean。
  • Spring Boot的@EnableAutoConfiguration:也能夠稱爲@Abracadabra,開啓Spring Boot自動配置,讓你不用再寫成篇的配置。

測試Spring Boot應用程序

@RunWith是指定JUnits所使用的測試運行器,全部測試都由這個運行器運行;這裏指定了Spring的運行器,因此測試時能夠獲得Spring的上下文

@SpringBootTest是SpringBoot項目測試的註解(未有詳解)

配置應用程序屬性

Initializr生成了一個空的application.properties文件,這裏能夠配置Spring Boot自動配置的一些屬性

這個文件也能夠刪除,可是存在時,Spring Boot會自動檢測到這個文件並應用其中的設置

二、項目構建插件

當使用Gradle或Maven進行初始化項目時,所生成的構建文件中,會包含一個如spring-boot-maven-plugin的一個插件

藉助這個插件,咱們能夠直接經過run便可啓動項目,也能夠經過這個插件把程序打包成一個jar包

2.二、使用起步依賴

一、

2.三、使用自動配置

3、自定義配置

3.一、覆蓋Spring Boot自動配置

3.二、經過屬性文件外置配置

3.三、定製應用程序錯誤頁面

4、測試

4.一、集成測試自動配置

4.二、測試Web應用程序

4.三、測試運行中的應用程序

5、Groovy與Spring Boot CLI

5.一、開發SPring Boot CLI引用程序

5.二、獲取依賴

5.三、用CLI運行測試

5.四、建立可部署產物

6、Spring Boot中使用Grails

6.一、使用GROM進行數據持久化

6.二、使用Groovy Server Pages定義視圖

6.三、結合Spring Boot與Grails3

7、深刻Actuator

7.一、Actuator的端點

啓用Actuator

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>

7.1.一、查看配置明細

一、得到Bean裝配報告

訪問/actuator/beans端點,這裏能夠查看Spring應用上下文中都有哪些Bean

每一個Bean都有5類信息

  • bean:Spring應用程序上下文中的Bean名稱或ID。
  • resource:.class文件的物理位置,一般是一個URL,指向構建出的JAR文件。這會隨着應用程序的構建和運行方式發生變化。
  • dependencies:當前Bean注入的Bean ID列表。
  • scope:Bean的做用域(一般是單例,這也是默認做用域)。
  • type:Bean的Java類型

二、詳解自動配置

訪問/actuator/autoconfig端點,這裏能夠某個Bean被建立或沒有被建立的緣由。

三、查看配置屬性

訪問/actuator/env端點,能夠查看全部環境屬性以及值的來源,還有哪些屬性注入了Bean

訪問/actuator/env/server.port端點,最後是屬性名稱,能夠查看某一個屬性的配置屬性

訪問/actuator/env/configprops端點,能夠查看有哪些環境屬性能夠設置,以及他們的值

四、生成端點到控制器的映射

訪問/actuator/mappings端點,能夠查看有控制器和哪些端點,以及他們的映射關係。

 

7.1.二、運行時度量

 

 

7.二、鏈接Actuator的遠程shell

7.三、經過JMX監控應用程序

7.四、定製Actuator

7.五、保護Actuator端點

8、部署Spring Boot應用程序

8.一、衡量多種部署方式

8.二、部署到應用服務器

8.三、推上雲端

相關文章
相關標籤/搜索