Spring Boot是由Pivotal公司(Spring目前隸屬於Pivotal)於2014發佈的一個框架,如上圖官網所示其java
設計目的是簡化新Spring應用搭建及開發過程,尤爲大幅減小Spring被譽爲詬病的XML配置,而且git
作到應用當即可運行(just run)同時高效支持Micro Service。web
總目錄面試
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"。安全
尚未讀過的小夥伴建議精讀一下,雖然距今年代久遠,但其中不乏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的創始人!這家公司可不可
小噓
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的目標:
能夠看出Boot但願給開發人員提供更加敏捷方便的基礎平臺:
上圖能夠清晰看出,Boot的定位是介於開發人員與Spring現有框架之間的一個助力,加速的位置;
其主要做用是實現了咱們上一段落的快速,現代目標,去/極簡XML配置,與第三方庫快速集成,
開箱即用(out-of-the-box),如Jackson, JDBC, MongoDB, Redis, Mail等。
4. Quick Start
咱們先看一下官方提供的sample:
當直接以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從新打包:
可執行JAR的結構:
可執行WAR的結構:
依賴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的技術平臺,提供
了模塊化方式導入依賴。如:
上面只是一些例子,官網能夠查看全部支持的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-starter-web, Boot會自動加載全部依賴的JAR, 固然也包括對應
SpringFramework的JAR包,不再須要以前的配置幾十個dependency了。
能夠看到Boot自動導入
好吧,仍是把Boot支持的核心Starters列舉一下吧,不展開了。
@SpringBootApplication
@SpringBootApplication等價於下面三合一:
@Configuration, @EnableAutoConfiguration, @ComponentScan
SpringApplication.run()執行時, Boot的autoconfigure會監測發現當前應用爲Web應用,因而內嵌
Tomcat容器並啓動Spring上下文,監聽8080端口。
有沒有發現SpringBoot今後讓Web服務編寫,調試效率大幅提高。
@Profiles
Spring Profiles提供了方便的對於多個環境變量配置與激活,如: DEV, QA, PROD等, 固然這個
也不是Boot的新功能。
@SpringBootTest
Spring Boot提供了@SpringBootTest方便測試:
JSON測試
Boot提供了@JsonTest來支持JSON測試,如Jackson的Object JSON序列化與反序列化操做。
6 微服務
在企業級基礎設施領域,微服務做爲一種重要的,流行的應用架構,其優勢是能夠實現快速開發,
模塊化管理,部署,集成;
Spring Boot經過Starters,提供了模塊化方式導入依賴,增強了開發RESTful Web服務的功能,
支持可運行JAR,對微服務有着自然的支持與簡化。尤爲是把各類微服務中的各類企業應用服務快速,
高效整合, 如數據訪問服務經過spring-boot-starter-data-jpa整合,經過Repository進行服務
暴露。
7 Spring Boot Actuator
Spring Boot還提供了不少高階線上JMX功能, 能夠用HTTP端口來管理,監控咱們的應用。而且
提供了一些自動監控,健康報表,這個對於運維來講比較實用。
首先引入actuator:
來看一下有哪些JMX線上功能:
咱們看看幾個比較經常使用的:
health : 默認提供了對應用自己,數據庫,MongoDB, Redis, MQ的健康監測
http://localhost:8080/health
info:能夠自定義以及以"info."開頭的配置參數會被暴露
http://localhost:8080/info
其結果爲:
dump:/dump執行一個線程的dump
固然,目前經過Actuator所暴露的HTTP服務只能提供只讀信息,若是但願運行時管理,須要經過JMX。
能夠經過Spring提供的@ManagedResource @ManagedAttribute @ManagedOperation來建立自定義
MBean, 以後經過相似JConsole鏈接到應用的JMX服務器,則能夠看到管理MBean。
8 Deployment
Cloud Foundry: 做爲Pivotal公司本身的開源PaaS雲平臺,固然要全力支持了。支持stand-alone可執行
JAR, 或者WAR包。
運行結果:
Heroku: Salesforce收購的最先開始雲平臺之一。部署方法 git push
AWS (Amazon Web Service)
Amazon最著名的Web服務,爲亞馬遜開闢了雲計算新市場。
boxfuse提供了一鍵式部署Spring Boot到AWS的服務。
整體而言,Spring Boot借鑑了現在如火如荼的PaaS雲服務,結合一向簡約一致的風格,提供
了具備創新性的無容器/自包含Web應用,同時與雲端及PaaS整合,可集成做爲移動應用後端,
提供微服務。