Spring Boot - 01 Spring Boot的前世今生

2004年3月24日,Spring官網(wǎng)發(fā)布了Spring Framework的1.0版本骗随,在一定程度上顛覆了Java開發(fā)的模式蛤织。Spring Framework提供的控制反轉(zhuǎn)和依賴注入,這兩個概念的提出也是受到了JNDI和EJB的容器注入的影響鸿染。換句話說指蚜,Spring Framework其實也是在J2EE的基礎(chǔ)上又建了一個輪子而已。從當(dāng)時的分層來看牡昆,Struts為web表示層姚炕、Hibernate為持久層,而Spring Framework就是把大家伙整合到一起的那么個作用丢烘。此時的Spring Framework還有一個致命的問題,Spring Framework需要隨著Java容器的啟動而裝載些椒。
那么在Spring Framework4.0發(fā)布的時候播瞳,Spring還同時發(fā)布了Spring Boot。官方是這么定義Spring Boot的免糕。

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 minimal Spring configuration.

Spring Boot使構(gòu)建獨(dú)立的Spring生產(chǎn)級別的項目變得簡單赢乓,同時提供了固化視圖來固化Spring Boot所依賴的Spring平臺庫和第三方類庫,從而減少管理類庫的煩惱石窑。大多數(shù)Spring Boot項目只需要少量的Spring配置牌芋。

1.Create stand-alone Spring applications
2.Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
3.Provide opinionated 'starter' dependencies to simplify your build configuration
4.Automatically configure Spring and 3rd party libraries whenever possible
5.Provide production-ready features such as metrics, health checks, and externalized configuration
6.Absolutely no code generation and no requirement for XML configuration

官網(wǎng)中也同時給出了Spring Boot的六大特性,分別是:

1.創(chuàng)建獨(dú)立的Spring應(yīng)用松逊;
2.直接嵌入Tomcat躺屁、Jetty或Undertow(不需要部署WAR文件);
3.提供固化的“Starter”依賴经宏,簡化構(gòu)建的配置步驟犀暑;
4.自動裝配Spring或第三方類庫;
5.提供運(yùn)維特性烁兰,比如指標(biāo)信息耐亏、健康檢查和配置外部化;
6.絕無代碼生成沪斟,而且不需要配置XML文件广辰。

從官網(wǎng)的說明中,我們不難看出,Spring Boot的優(yōu)點(diǎn):

使編碼變的簡單
使配置變的簡單
使部署變的簡單
使監(jiān)控變的簡單

怎么就簡單了择吊?

很久很久以前(其實也沒那么久):
做Spring項目開發(fā)時李根,程序員要知道配置哪些類來讓Hibernate和Spring一起工作,還要知道如何配置view resolver來控制哪個模版進(jìn)行視圖層的展示干发。寫了一大堆代碼其實只是在處理Spring框架本身的配置朱巨,此時一行業(yè)務(wù)邏輯都沒有寫。開發(fā)完成之后枉长,還要考慮部署的問題冀续,比如如何配置容器,如何修改配置文件等等必峰。而且在多應(yīng)用部署到同一個Tomcat的時候洪唐,經(jīng)常會出現(xiàn)沖突。就算花了很大力氣解決了這些問題吼蚁,程序部署成功之后凭需,也很難去了解這個程序的運(yùn)行狀態(tài)。那么還要配置第三方工具來了解應(yīng)用程序運(yùn)行狀態(tài)肝匆,參數(shù)粒蜈,環(huán)境變量。盡管Spring幫我們解決了依賴注入的問題旗国,簡化了MVC的流程枯怖,但是Spring框架本身集成了越來越多東西,導(dǎo)致其越來越難配置能曾,維護(hù)成本成直線上升度硝。

現(xiàn)在
Spring Boot使用“約定優(yōu)于配置”的理念讓項目快速運(yùn)行起來。簡單描述就是項目中存在大量的配置寿冕,此外還內(nèi)置一個習(xí)慣性的配置蕊程,讓我們無須手動進(jìn)行配置。使用Spring Boot 很容易創(chuàng)建一個獨(dú)立運(yùn)行驼唱、準(zhǔn)生產(chǎn)級別的Spring項目藻茂,而且我們幾乎不用怎么進(jìn)行配置。

約定優(yōu)于配置

約定優(yōu)于配置(Convention Over Configuration)曙蒸,也稱作按約定編程捌治,是一種軟件設(shè)計范式,旨在減少軟件開發(fā)人員需做決定的數(shù)量纽窟、獲得簡單的好處肖油,而又不失靈活性。
本質(zhì)上說臂港,開發(fā)人員僅需規(guī)定應(yīng)用中不符約定的部分森枪。例如视搏,如果模型中有個名為 User 的類德挣,那么數(shù)據(jù)庫中對應(yīng)的表就會默認(rèn)命名為 user解幽。只有在偏離這一約定時,例如將該表命名為“l(fā)egal_user”底桂,才需寫有關(guān)這個名字的配置式散。
我們可以按照這個思路來設(shè)想筋遭,我們約定 Controller 層就是 Web 請求層可以省略 MVC 的配置;我們約定在 Service 結(jié)尾的類自動注入事務(wù)暴拄,就可以省略了 Spring 的切面事務(wù)配置漓滔。
在 Spring 體系中,Spring Boot JPA 就是約定優(yōu)于配置最佳實現(xiàn)之一乖篷,不需要關(guān)注表結(jié)構(gòu)响驴,我們約定類名即是表名,屬性名即是表的字段撕蔼,String 對應(yīng) varchar豁鲤,long 對應(yīng) bigint,只有需要一些特殊要求的屬性鲸沮,我們再單獨(dú)進(jìn)行配置琳骡,按照這個約定我們可以將以前的工作大大簡化。
Spring Boot 體系將約定優(yōu)于配置的思想展現(xiàn)得淋漓盡致讼溺,小到配置文件日熬、中間件的默認(rèn)配置,大到內(nèi)置容器肾胯、生態(tài)中的各種 Starters 無不遵循此設(shè)計規(guī)則。Spring Boot 鼓勵各軟件組織方創(chuàng)建自己的 Starter耘纱,創(chuàng)建 Starter 的核心組件之一就是 autoconfigure 模塊敬肚,也是 Starter 的核心功能,在啟動的時候進(jìn)行自動裝配束析,屬性默認(rèn)化配置艳馒。
可以說正是因為 Spring Boot 簡化了配置和眾多的 Starters 才讓 Spring Boot 變得簡單、易用员寇、快速上手弄慰。Spring Boot 約定優(yōu)于配置的思想讓 Spring Boot 項目非常容易上手。

Spring Boot 都市傳說

一切一切的起點(diǎn)

2002 年 10 月蝶锋,Rod Johnson 撰寫了一本名為 Expert One-on-One J2EE 設(shè)計和開發(fā)的書陆爽。本書當(dāng)時由 Wrox出版社出版,介紹了當(dāng)時 Java 企業(yè)應(yīng)用程序開發(fā)的情況扳缕,并指出了 Java EE 和 EJB 組件框架中的存在的一些主要缺陷慌闭。在這本書中别威,他提出了一個基于普通 Java 類和依賴注入的更簡單的解決方案。(這里就對應(yīng)了我們開篇講到的驴剔,依賴注入并不是Spring發(fā)明的省古,而是在J2EE原來的基礎(chǔ)上做了優(yōu)化改進(jìn))

在書中,他展示了如何在不使用 EJB 的情況下構(gòu)建高質(zhì)量丧失,可擴(kuò)展的在線座位預(yù)留系統(tǒng)豺妓。為了構(gòu)建應(yīng)用程序,他編寫了超過 30,000 行的基礎(chǔ)結(jié)構(gòu)代碼布讹。包含許多可重用的 Java 接口和類琳拭,如 ApplicationContext和BeanFactory。由于java接口是依賴注入的基本構(gòu)建塊炒事,因此他將這些類的根包命名為com.interface21臀栈。

Spring 誕生

在本書發(fā)布后不久,開發(fā)者 Juergen Hoeller 和 Yann Caroff 說服 Rod Johnson 創(chuàng)建一個基于基礎(chǔ)結(jié)構(gòu)代碼的開源項目挠乳。Rod权薯,Juergen 和 Yann 于 2003 年 2 月左右開始合作開發(fā)該項目 。Yann 為新框架創(chuàng)造了“Spring”的名字睡扬。

2004 年 3 月盟蚣,1.0 版發(fā)布。有趣的是卖怜,在1.0發(fā)布之前屎开,spring 就被開發(fā)人員廣泛采用。2004 年 8 月马靠,Rod Johnson奄抽,Juergen Hoeller,Keith Donald 和Colin Sampaleanu 共同創(chuàng)立了一家專注于 Spring 咨詢甩鳄,培訓(xùn)和支持的公司: interface21逞度。

Yann Caroff 在很早離開了團(tuán)隊,Rod Johnson 在 2012 年離開妙啃,Juergen Hoeller 目前仍然還在團(tuán)隊中進(jìn)行開發(fā)工作档泽。自 2004 年 1.0 版本發(fā)布以來,Spring 框架迅速發(fā)展揖赴。Spring 2.0 于 2006 年 10 月發(fā)布馆匿,Spring的下載量超過了 100 萬。Spring 2.0 具有可擴(kuò)展的 XML 配置功能燥滑,用于簡化 XML 配置渐北,支持 Java 5,額外的 IoC 容器擴(kuò)展點(diǎn)突倍,支持動態(tài)語言腔稀。

在 Rod 領(lǐng)導(dǎo)下管理 Interface21 項目于 2007 年 11 月更名為 SpringSource盆昙。同時發(fā)布了 Spring 2.5。Spring 2.5 中的主要新功能包括支持 Java 6 / Java EE 5焊虏,支持注釋配置淡喜,classpath 中的組件自動檢測和兼容 OSGi 的 bundle。

2007 年诵闭,SpringSource 從基準(zhǔn)資本獲得了 A 輪融資(1000萬美元)炼团。SpringSource 在此期間收購了多家公司,如Hyperic疏尿,G2One 等瘟芝。2009年8月,SpringSource 以 4.2 億美元被 VMWare 收購褥琐。SpringSource 在幾周內(nèi)收購了云代工廠锌俱,這是一家云 PaaS 提供商。2015 年敌呈,云代工廠轉(zhuǎn)型成了非營利云代工廠贸宏。

2009 年 12 月,Spring 3.0 發(fā)布磕洪。Spring 3.0 具有許多重要特性吭练,如重組模塊系統(tǒng),支持 Spring 表達(dá)式語言析显,基于 Java 的 bean 配置(JavaConfig)鲫咽,支持嵌入式數(shù)據(jù)庫(如 HSQL,H2 和 Derby)谷异,模型驗證/ REST 支持和對 Java EE 的支持分尸。

2011 年和 2012 年發(fā)布了許多 3.x 系列的小版本。2012 年 7 月歹嘹,Rod Johnson 離開了團(tuán)隊寓落。

Spring Boot誕生

2012 年 10 月,Mike Youngstrom 在 Spring jira 中創(chuàng)建了一個功能請求 荞下, 要求在 Spring 框架中支持無容器 Web 應(yīng)用程序體系結(jié)構(gòu)。他談到了在主容器引導(dǎo) spring 容器內(nèi)配置 Web 容器服務(wù)史飞。(畫重點(diǎn)尖昏,Spring Boot 的苗頭發(fā)生了)

2013 年 4月,VMware 和 EMC 通過 GE 投資創(chuàng)建了一家名為 Pivotal 的合資企業(yè)构资。所有的 Spring 應(yīng)用項目都轉(zhuǎn)移到了 Pivotal抽诉。

2013 年 12 月,Pivotal 宣布發(fā)布 Spring 框架 4.0吐绵。Spring 4.0 是 Spring 框架的一大進(jìn)步迹淌,它包含了對Java 8 的全面支持河绽,更高的第三方庫依賴性(groovy 1.8+,ehcache 2.1+唉窃,hibernate 3.6+等)耙饰,Java EE 7 支持,groovy DSL for bean 定義纹份,對 websockets 的支持以及對泛型類型的支持作為注入 bean 的限定符苟跪。

2014 年 4 月,Spring Boot 1.0.0 發(fā)布蔓涧。改進(jìn)的模板支持件已,gemfire 支持,Elastic Search 和 Apache Solr 的自動配置元暴。

2015 年 3 月篷扩,Spring Boot 1.2 發(fā)布。升級到 servlet 3.1 / tomcat 8 / jetty 9茉盏,spring 4.1 升級鉴未,支持 banner / jms / SpringBootApplication 注解。

2016 年 12 月援岩,Spring Boot 1.3發(fā)布新的 spring-boot-devtools歼狼,用于緩存技術(shù)(ehcache,hazelcast享怀,redis 和 infinispan)的自動配置以及完全可執(zhí)行的 jar 支持羽峰。于此同時,Spring 4.2 升級添瓷。

2017年1月梅屉,Spring Boot 1.4 支持 couchbase / neo4j,分析啟動失敗和RestTemplateBuilder鳞贷。于此同時Spring 4.3 升級坯汤。

2017年2月,Spring Boot 1.5 支持 kafka / ldap搀愧,第三方庫升級惰聂,棄用 CRaSH 支持和執(zhí)行器記錄器端點(diǎn)以動態(tài)修改應(yīng)用程序日志級別。

2014 年至 2017 年期間發(fā)布了許多 Spring 框架 4.xx 系列版本咱筛。Spring 4.3.8 于 2017 年 4 月發(fā)布搓幌,并成為 4.x 系列中的最后一個。

2018 年 03 月迅箩,Spring Boot 2.0 基于 Java 8溉愁,支持 Java 9,支持 Quartz 饲趋,調(diào)度程序大大簡化了安全自動配置拐揭,支持嵌入式 Netty撤蟆。于此同時,Spring 5.0發(fā)布堂污。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末家肯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子敷鸦,更是在濱河造成了極大的恐慌息楔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扒披,死亡現(xiàn)場離奇詭異值依,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碟案,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門愿险,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人价说,你說我怎么就攤上這事辆亏。” “怎么了鳖目?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵扮叨,是天一觀的道長。 經(jīng)常有香客問我领迈,道長彻磁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任狸捅,我火速辦了婚禮衷蜓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尘喝。我一直安慰自己磁浇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布朽褪。 她就那樣靜靜地躺著置吓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缔赠。 梳的紋絲不亂的頭發(fā)上交洗,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音橡淑,去河邊找鬼。 笑死咆爽,一個胖子當(dāng)著我的面吹牛梁棠,可吹牛的內(nèi)容都是我干的置森。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼符糊,長吁一口氣:“原來是場噩夢啊……” “哼凫海!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起男娄,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤行贪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后模闲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體建瘫,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年尸折,在試婚紗的時候發(fā)現(xiàn)自己被綠了啰脚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡实夹,死狀恐怖橄浓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亮航,我是刑警寧澤荸实,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站缴淋,受9級特大地震影響准给,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宴猾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一圆存、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仇哆,春花似錦沦辙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至延欠,卻和暖如春陌兑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背由捎。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工兔综, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓软驰,卻偏偏與公主長得像涧窒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锭亏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容