Spring Boot簡析.


Spring Boot

Spring Boot簡析.

Spring Boot是由Pivotal公司(Spring目前隸屬於Pivotal)於2014發佈的一個框架,如上圖官網所示其java

設計目的是簡化新Spring應用搭建及開發過程,尤爲大幅減小Spring被譽爲詬病的XML配置,而且git

作到應用當即可運行(just run)同時高效支持Micro Service。web

總目錄面試

  • Spring創始人Rod Johnson
  • Spring以前世此生
  • Spring Boot Overview
  • Quick Start
  • Spring Boot Application
  • 微服務
  • Spring Boot Actuator
  • Deployment
  • 總結

1. Spring創始人 Rod Johnsonspring

提到Spring, 不能不說起締造者Rod Johnson, 雖然物是人非,Rod早已離開Spring團隊。Rod出身於數據庫

澳大利亞,畢業於悉尼大學計算機科班,同時持有音樂學位。使人驚歎的是,Rod是一名音樂愛好者後端

,爲了對音樂的探索和追求,Rod得到了音樂學的博士學位,果真寫程序是一門藝術。Rod曾今在保api

險,金融等領域從事技術顧問,同時積極參與JSR, JCP, JDO規範等,後居住於倫敦。tomcat

Rod於2002推出其大做"Expert one-on-one J2EE Development without EJB"。安全

Spring Boot簡析.

尚未讀過的小夥伴建議精讀一下,雖然距今年代久遠,但其中不乏J2EE, 架構等經典之做,

更是Spring總體框架的設計之源,包括後續的IOC思想之由來等。Rod隨後創辦Interface21,

開創Spring框架,而以後的Spring如日中天,無需多言。筆者曾戲稱:

"In the real world, J2EE ONLY define Interface, Spring will implement".

而Rod在Java領域的影響已經遠遠超越了Spring自己的範疇。


2. Spring以前世此生

自Spring於2004年推出後1.0版本後,通過5年的發展,Spring已經在業界大受歡迎,甚者鋒

芒蓋過了SUN J2EE, 終於在資本運做之下,於2009年被VMware歸入旗下。

但自從被VM收購後,受公司文化以及管理方向影響,Spring團隊陸續損失了多元大將,包括

Peter Cooper-Ellis, Mark Brewer,還有Shaun Connolly。

而其間,創始人Rod在VM一直擔任SVP高級副總裁,直至2012其離職。

若是給咱們一個面試Rod的機會:

面試官:"請問您離職的理由是什麼?"

Rod :「VM沒有太多機會寫代碼,甚者脫離Spring, 只能業餘項目寫代碼,學習Scala」.

哈哈,這個可不是做者YY, Rod於2012年正式加入Typesafe Inc.(最近2016.2更名叫Lightbend

Inc.), 注意這家公司但是Martin Odersky創立的,而Martin正是Scala的創始人!這家公司可不可

小噓

Spring Boot簡析.

Typesafe專一於提供基於Scala, Akka,Play, Spark的解決方案, 注意Typesafe聘請了Java之父

James Gosling以及咱們前文說起的並行大師Doug Lea擔任其技術顧問。

繼續回到Spring in VM. 做爲VM的母公司(2003年被收購)EMC, 於2013年斥資成立獨立實體公司

Pivotal。 Pivotal的定位爲下一代雲計算與大數據應用公司,而Spring也化爲旗下重要應用框架。

EMC/VM的管理層終於也看到了Spring之開源文化與VM, EMC的商業文化之衝突,並明智拆分。

在後Rod時代的Spring, 沒有繼續關注架構挑戰,隨着Pivotal公司的定位,轉向企業級計算,包括

大數據,NoSQL, HTML5, 移動,社交網絡等,而這幾年的轉型也推出了衆多佳做,如Spring Data

(爲JPA、Redis、Mongo、Hadoop和GemFire等提供了數據訪問), Spring Mobile, Spring Social.

固然Spring也未放棄框架自己演進,會陸續加入異步處理,Java 8整合等。

3. Spring Boot Overview

正式開始Spring Boot.

咱們來看一下官網Spring Boot的目標:

  • 提供快速開發環境,幾乎無XML配置
  • 功能化,或者可稱之爲「微服務」部署單元
  • 自包含可運行單元,只需 java -jar
  • 自帶容器(BYOC, Bring your own container) ,內置tomcat/jetty
  • 對雲,PaaS支持

能夠看出Boot但願給開發人員提供更加敏捷方便的基礎平臺:

  • 應用目標PaaS, 雲端
  • Micro Service 微服務
  • 移動應用服務端
  • 其餘JVM語言運行時,如Groovy

上圖能夠清晰看出,Boot的定位是介於開發人員與Spring現有框架之間的一個助力,加速的位置;

其主要做用是實現了咱們上一段落的快速,現代目標,去/極簡XML配置,與第三方庫快速集成,

開箱即用(out-of-the-box),如Jackson, JDBC, MongoDB, Redis, Mail等。

4. Quick Start

咱們先看一下官方提供的sample:

Spring Boot簡析.

當直接以stand-alone來運行程序時, Spring會依據@EnableAutoConfiguration以及pom配置的

spring-boot-starter-web來自動配置啓動Tomcat web服務器,

http://localhost:8080

是否有一種清風徐來的清涼與愜意?

可執行JAR

可執行,自包含JAR(fat jars),Java自己並無提供這樣一種簡單的方案。行內一些開發人員

使用稱之爲"uber" jars, 即把全部jars的classes從新打包package,顯然這樣並很差,如:重名類;

以及沒法得知某個class屬於哪個jar等。

Spring Boot則另闢蹊徑,借鑑了WAR的結構,即全部依賴的jars被子包含到一個JAR中。

引入spring-boot-maven-plugin從新打包:

Spring Boot簡析.

可執行JAR的結構:

Spring Boot簡析.

可執行WAR的結構:

Spring Boot簡析.

依賴JAR會放到WEB-INF/lib目錄;若是隻是內嵌容器須要的JAR則放置到WEB-INF/lib-provided,

如servlet-api.jar

注意,Spring Boot的WAR不須要傳統的web.xml配置文件。

5 Spring Boot Application

Starters

Spring Boot提供了Starters做爲one-stop-shop,能夠方便組織依賴管理Spring的技術平臺,提供

了模塊化方式導入依賴。如:

Spring Boot簡析.

上面只是一些例子,官網能夠查看全部支持的starter。這些starter提供了模塊化導入依賴的管理,

如spring-boot-starter-web, 會包含導入內嵌Tomcat, MVC, RESTFul等依賴;

spring-boot-starter-security則會自動配置Spring Security, 從而爲應用提供基本認證及其餘安全

特性服務,如CSSP(cross-site scripting protection)跨站點腳本防禦。

咱們以spring-boot-starter-web爲例,看一下Boot如何模塊化管理。先看一下pom配置

Spring Boot簡析.

只有簡單的一句,spring-boot-starter-web, Boot會自動加載全部依賴的JAR, 固然也包括對應

SpringFramework的JAR包,不再須要以前的配置幾十個dependency了。

能夠看到Boot自動導入

  • spring-web, spring-webmvc
  • tomcat-embed-*
  • jackson
  • spring-*

好吧,仍是把Boot支持的核心Starters列舉一下吧,不展開了。

Spring Boot簡析.

@SpringBootApplication

@SpringBootApplication等價於下面三合一:

@Configuration, @EnableAutoConfiguration, @ComponentScan

Spring Boot簡析.

SpringApplication.run()執行時, Boot的autoconfigure會監測發現當前應用爲Web應用,因而內嵌

Tomcat容器並啓動Spring上下文,監聽8080端口。

  • 配置Servlet默認Context路徑
  • 配置servlet-mapping, url-patterns
  • Scan同名package中@Controller @Service @Component @Repository

有沒有發現SpringBoot今後讓Web服務編寫,調試效率大幅提高。

@Profiles

Spring Profiles提供了方便的對於多個環境變量配置與激活,如: DEV, QA, PROD等, 固然這個

也不是Boot的新功能。

Spring Boot簡析.

@SpringBootTest

Spring Boot提供了@SpringBootTest方便測試:

Spring Boot簡析.

JSON測試

Boot提供了@JsonTest來支持JSON測試,如Jackson的Object JSON序列化與反序列化操做。

Spring Boot簡析.

6 微服務

在企業級基礎設施領域,微服務做爲一種重要的,流行的應用架構,其優勢是能夠實現快速開發,

模塊化管理,部署,集成;

Spring Boot經過Starters,提供了模塊化方式導入依賴,增強了開發RESTful Web服務的功能,

支持可運行JAR,對微服務有着自然的支持與簡化。尤爲是把各類微服務中的各類企業應用服務快速,

高效整合, 如數據訪問服務經過spring-boot-starter-data-jpa整合,經過Repository進行服務

暴露。

Spring Boot簡析.

7 Spring Boot Actuator

Spring Boot還提供了不少高階線上JMX功能, 能夠用HTTP端口來管理,監控咱們的應用。而且

提供了一些自動監控,健康報表,這個對於運維來講比較實用。

首先引入actuator:

Spring Boot簡析.

來看一下有哪些JMX線上功能:

Spring Boot簡析.

咱們看看幾個比較經常使用的:

health : 默認提供了對應用自己,數據庫,MongoDB, Redis, MQ的健康監測

http://localhost:8080/health

Spring Boot簡析.


info能夠自定義以及以"info."開頭的配置參數會被暴露

http://localhost:8080/info

Spring Boot簡析.

其結果爲:

Spring Boot簡析.

  • metrics:可配置系統性能參數,如內存,CPU,Java類加載等
  • http://localhost:8080/metrics
  • env:訪問環境信息
  • http://localhost:8080/env
  • 固然也能夠直接訪問某個具體參數信息。
Spring Boot簡析.

dump:/dump執行一個線程的dump

Spring Boot簡析.

固然,目前經過Actuator所暴露的HTTP服務只能提供只讀信息,若是但願運行時管理,須要經過JMX。

能夠經過Spring提供的@ManagedResource @ManagedAttribute @ManagedOperation來建立自定義

MBean, 以後經過相似JConsole鏈接到應用的JMX服務器,則能夠看到管理MBean。

8 Deployment

Cloud Foundry: 做爲Pivotal公司本身的開源PaaS雲平臺,固然要全力支持了。支持stand-alone可執行

JAR, 或者WAR包。

Spring Boot簡析.

運行結果:

Spring Boot簡析.

Heroku: Salesforce收購的最先開始雲平臺之一。部署方法 git push

Spring Boot簡析.

AWS (Amazon Web Service)

Amazon最著名的Web服務,爲亞馬遜開闢了雲計算新市場。

Spring Boot簡析.

boxfuse提供了一鍵式部署Spring Boot到AWS的服務。

Spring Boot簡析.

整體而言,Spring Boot借鑑了現在如火如荼的PaaS雲服務,結合一向簡約一致的風格,提供

了具備創新性的無容器/自包含Web應用,同時與雲端及PaaS整合,可集成做爲移動應用後端,

提供微服務。

Spring Boot簡析.
相關文章
相關標籤/搜索