《Spring Boot 實(shí)戰(zhàn):從0到1》第1章 Spring Boot簡介

第1章 Spring Boot簡介

Java Web開發(fā)涉及的技術(shù)比較繁雜,涉及到很多開發(fā)框架和工具(Java, Scala, Kotlin, Clojure梢睛,Groovy, Grails层皱,Gradle, Maven, JDBC,Mysql, oracle, mongodb, Tomcat,Jetty涉兽,Spring招驴,Struts,Hibernate枷畏,Mybatis别厘,JPA,JSP拥诡,velocity触趴,freemarker,thymeleaf 渴肉,Redis冗懦,... )而且它們各有所長,并不是一個(gè)完善的體系仇祭。這對(duì)程序員能進(jìn)行Jave Web開發(fā)披蕉,帶來了一定的技術(shù)門檻和學(xué)習(xí)成本。

有沒有一個(gè)像“航空母艦(Aircraft Carrier)”式的威力強(qiáng)大的武器乌奇,可以整合這一切呢没讲?答案就是:Spring Boot。

2.1 用SpringBoot創(chuàng)造一切吧

build anything with Spring Boot

SpringBoot讓創(chuàng)建獨(dú)立的礁苗,生產(chǎn)環(huán)境的基于Spring的應(yīng)用更加快捷簡易食零。 大部分Spring Boot Application只要一些極簡的配置,即可“一鍵運(yùn)行”寂屏。

SpringBoot的特性如下[1]:

  • 創(chuàng)建獨(dú)立的Spring applications
  • 能夠使用內(nèi)嵌的Tomcat, Jetty or Undertow贰谣,不需要部署war
  • 提供定制化的starter poms來簡化maven配置(gradle相同)
  • 追求極致的自動(dòng)配置Spring
  • 提供一些生產(chǎn)環(huán)境的特性,比如特征指標(biāo)迁霎,健康檢查和外部配置吱抚。
  • 零代碼生成和零XML配置

Spring由于其繁瑣的配置,一度被人認(rèn)為“配置地獄”考廉,各種XML秘豹、Annotation配置,讓人眼花繚亂昌粤,而且如果出錯(cuò)了也很難找出原因既绕。而Spring Boot更多的是采用Java Config的方式,對(duì)Spring進(jìn)行配置涮坐。

我們企業(yè)級(jí)軟件的目標(biāo)是提供穩(wěn)定健壯的服務(wù)凄贩,以實(shí)現(xiàn)其商業(yè)價(jià)值。為了滿足這些需求袱讹,服務(wù)開發(fā)者需要能夠快速構(gòu)建和迭代新的應(yīng)用疲扎,同時(shí)應(yīng)用的架構(gòu)是可擴(kuò)展的,便攜式的,富彈性的椒丧,可以進(jìn)行頻繁的更新壹甥。SpringBoot正式為此而誕生[2]。

2.2 SpringBoot起源

SpringBoot是伴隨著Spring4.0誕生的壶熏;

從字面理解句柠,Boot是引導(dǎo)的意思,因此SpringBoot幫助開發(fā)者快速搭建Spring框架棒假;SpringBoot幫助開發(fā)者快速啟動(dòng)一個(gè)Web容器溯职;SpringBoot繼承了原有Spring框架的優(yōu)秀基因;SpringBoot使得基于Spring的開發(fā)過程更加簡易淆衷。

Change is inevitable, that's the only constant. Become the Future You Imagine (Rob Mee, Pivotal CEO)[3]

Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架缸榄,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置祝拯,從而使開發(fā)人員不再需要定義樣板化的配置甚带。通過這種方式,Boot致力于在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者佳头。

多年以來鹰贵,Spring IO平臺(tái)飽受非議的一點(diǎn)就是大量的XML配置以及復(fù)雜的依賴管理。在去年的SpringOne 2GX會(huì)議上康嘉,Pivotal的CTO Adrian Colyer回應(yīng)了這些批評(píng)碉输,并且特別提到該平臺(tái)將來的目標(biāo)之一就是實(shí)現(xiàn)免XML配置的開發(fā)體驗(yàn)。Boot所實(shí)現(xiàn)的功能超出了這個(gè)任務(wù)的描述亭珍,開發(fā)人員不僅不再需要編寫XML敷钾,而且在一些場景中甚至不需要編寫繁瑣的import語句。

然而肄梨,Spring Boot并不是要成為Spring IO平臺(tái)里面眾多“Foundation”層項(xiàng)目的替代者阻荒。Spring Boot的目標(biāo)不在于為已解決的問題域提供新的解決方案,而是為平臺(tái)帶來另一種開發(fā)體驗(yàn)众羡,從而簡化對(duì)這些已有技術(shù)的使用侨赡。對(duì)于已經(jīng)熟悉Spring生態(tài)系統(tǒng)的開發(fā)人員來說,Boot是一個(gè)很理想的選擇粱侣,不過對(duì)于采用Spring技術(shù)的新人來說羊壹,Boot提供一種更簡潔的方式來使用這些技術(shù)。[4]

2.3 SpringBoot在整個(gè)Spring生態(tài)中

2.3.1 Spring生態(tài)

作為當(dāng)前主流的企業(yè)框架Spring齐婴,它提供了一整套相關(guān)的頂級(jí)項(xiàng)目油猫,能讓開發(fā)者快速的上手實(shí)現(xiàn)自己的應(yīng)用。Spring生態(tài)如下圖所示:

SpringBoot生態(tài)

Spring IO platform:用于系統(tǒng)部署尔店,是可集成的眨攘,構(gòu)建現(xiàn)代化應(yīng)用的版本平臺(tái)主慰,具體來說當(dāng)你使用maven dependency引入spring jar包時(shí)它就在工作了嚣州。

Spring Boot:旨在簡化創(chuàng)建產(chǎn)品級(jí)的 Spring 應(yīng)用和服務(wù)鲫售,簡化了配置文件,使用嵌入式web服務(wù)器该肴,含有諸多開箱即用微服務(wù)功能情竹,可以和spring cloud聯(lián)合部署。

Spring Framework:即通常所說的spring 框架匀哄,是一個(gè)開源的Java/Java EE全功能棧應(yīng)用程序框架秦效,其它spring項(xiàng)目如spring boot也依賴于此框架。

Spring Cloud:微服務(wù)工具包涎嚼,為開發(fā)者提供了在分布式系統(tǒng)的配置管理阱州、服務(wù)發(fā)現(xiàn)、斷路器法梯、智能路由苔货、微代理、控制總線等開發(fā)工具包立哑。

Spring XD:是一種運(yùn)行時(shí)環(huán)境(服務(wù)器軟件夜惭,非開發(fā)框架),組合spring技術(shù)铛绰,如spring batch诈茧、spring boot、spring data捂掰,采集大數(shù)據(jù)并處理敢会。

Spring Data:是一個(gè)數(shù)據(jù)訪問及操作的工具包,封裝了很多種數(shù)據(jù)及數(shù)據(jù)庫的訪問相關(guān)技術(shù)这嚣,包括:jdbc鸥昏、Redis、MongoDB疤苹、Neo4j等互广。

Spring Batch:批處理框架,或說是批量任務(wù)執(zhí)行管理器卧土,功能包括任務(wù)調(diào)度惫皱、日志記錄/跟蹤等。

Spring Security:是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架尤莺。

Spring Integration:面向企業(yè)應(yīng)用集成(EAI/ESB)的編程框架旅敷,支持的通信方式包括HTTP、FTP颤霎、TCP/UDP媳谁、JMS涂滴、RabbitMQ、Email等晴音。

Spring Social:一組工具包柔纵,一組連接社交服務(wù)API,如Twitter锤躁、Facebook搁料、LinkedIn、GitHub等系羞,有幾十個(gè)郭计。

Spring AMQP:消息隊(duì)列操作的工具包,主要是封裝了RabbitMQ的操作椒振。

Spring HATEOAS:是一個(gè)用于支持實(shí)現(xiàn)超文本驅(qū)動(dòng)的 REST Web 服務(wù)的開發(fā)庫昭伸。

Spring Mobile:是Spring MVC的擴(kuò)展,用來簡化手機(jī)上的Web應(yīng)用開發(fā)澎迎。

Spring for Android:是Spring框架的一個(gè)擴(kuò)展庐杨,其主要目的在乎簡化Android本地應(yīng)用的開發(fā),提供RestTemplate來訪問Rest服務(wù)嗡善。

Spring Web Flow:目標(biāo)是成為管理Web應(yīng)用頁面流程的最佳方案辑莫,將頁面跳轉(zhuǎn)流程單獨(dú)管理,并可配置罩引。

Spring LDAP:是一個(gè)用于操作LDAP的Java工具包各吨,基于Spring的JdbcTemplate模式,簡化LDAP訪問袁铐。

Spring Session:session管理的開發(fā)工具包揭蜒,讓你可以把session保存到redis等,進(jìn)行集群化session管理剔桨。

Spring Web Services:是基于Spring的Web服務(wù)框架屉更,提供SOAP服務(wù)開發(fā),允許通過多種方式創(chuàng)建Web服務(wù)洒缀。

Spring Shell:提供交互式的Shell可讓你使用簡單的基于Spring的編程模型來開發(fā)命令瑰谜,比如Spring Roo命令。

Spring Roo:是一種Spring開發(fā)的輔助工具树绩,使用命令行操作來生成自動(dòng)化項(xiàng)目萨脑,操作非常類似于Rails。

Spring Scala:為Scala語言編程提供的spring框架的封裝(新的編程語言饺饭,Java平臺(tái)的Scala于2003年底/2004年初發(fā)布)渤早。

Spring BlazeDS Integration:一個(gè)開發(fā)RIA工具包,可以集成Adobe Flex瘫俊、BlazeDS鹊杖、Spring以及Java技術(shù)創(chuàng)建RIA悴灵。

Spring Loaded:用于實(shí)現(xiàn)java程序和web應(yīng)用的熱部署的開源工具。

Spring REST Shell:可以調(diào)用Rest服務(wù)的命令行工具骂蓖,敲命令行操作Rest服務(wù)积瞒。

2.3.2 Spring cloud子項(xiàng)目

目前來說spring主要集中于spring boot(用于開發(fā)微服務(wù))和spring cloud相關(guān)框架的開發(fā)。spring cloud子項(xiàng)目包括:

Spring Cloud Config:配置管理開發(fā)工具包涯竟,可以讓你把配置放到遠(yuǎn)程服務(wù)器赡鲜,目前支持本地存儲(chǔ)空厌、Git以及Subversion庐船。

Spring Cloud Bus:事件、消息總線嘲更,用于在集群(例如筐钟,配置變化事件)中傳播狀態(tài)變化,可與Spring Cloud Config聯(lián)合實(shí)現(xiàn)熱部署赋朦。

Spring Cloud Netflix:針對(duì)多種Netflix組件提供的開發(fā)工具包篓冲,其中包括Eureka、Hystrix宠哄、Zuul壹将、Archaius等。

Netflix Eureka:云端負(fù)載均衡毛嫉,一個(gè)基于 REST 的服務(wù)诽俯,用于定位服務(wù),以實(shí)現(xiàn)云端的負(fù)載均衡和中間層服務(wù)器的故障轉(zhuǎn)移承粤。

Netflix Hystrix:容錯(cuò)管理工具暴区,旨在通過控制服務(wù)和第三方庫的節(jié)點(diǎn),從而對(duì)延遲和故障提供更強(qiáng)大的容錯(cuò)能力。

Netflix Zuul:邊緣服務(wù)工具辛臊,是提供動(dòng)態(tài)路由仙粱,監(jiān)控,彈性彻舰,安全等的邊緣服務(wù)伐割。

Netflix Archaius:配置管理API,包含一系列配置管理API刃唤,提供動(dòng)態(tài)類型化屬性隔心、線程安全配置操作、輪詢框架透揣、回調(diào)機(jī)制等功能济炎。

Spring Cloud for Cloud Foundry:通過Oauth2協(xié)議綁定服務(wù)到CloudFoundry,CloudFoundry是VMware推出的開源PaaS云平臺(tái)辐真。

Spring Cloud Sleuth:日志收集工具包须尚,封裝了Dapper,Zipkin和HTrace操作崖堤。

Spring Cloud Data Flow:大數(shù)據(jù)操作工具,通過命令行方式操作數(shù)據(jù)流耐床。

Spring Cloud Security:安全工具包密幔,為你的應(yīng)用程序添加安全控制,主要是指OAuth2撩轰。

Spring Cloud Consul:封裝了Consul操作胯甩,consul是一個(gè)服務(wù)發(fā)現(xiàn)與配置工具,與Docker容器可以無縫集成堪嫂。

Spring Cloud Zookeeper:操作Zookeeper的工具包偎箫,用于使用zookeeper方式的服務(wù)注冊(cè)和發(fā)現(xiàn)。

Spring Cloud Stream:數(shù)據(jù)流操作開發(fā)包皆串,封裝了與Redis,Rabbit淹办、Kafka等發(fā)送接收消息。

Spring Cloud CLI:基于 Spring Boot CLI恶复,可以讓你以命令行方式快速建立云組件怜森。

2.4 SpringBoot核心組件

SpringBoot核心模塊如下圖所示:

SpringBoot核心組件

2.5 SpringBoot版本歷史

SpringBoot項(xiàng)目源碼:https://github.com/spring-projects/spring-boot

SpringBoot學(xué)習(xí)示例:https://github.com/netgloo/spring-boot-samples

版本歷史:https://github.com/spring-projects/spring-boot/releases

2.6 SpringBoot學(xué)習(xí)成本

正因?yàn)镾pring Boot是與Spring一脈相承的,所以對(duì)于廣大的Java開發(fā)者而言谤牡,對(duì)于Spring的學(xué)習(xí)成本幾乎為零副硅。

在實(shí)踐Spring Boot時(shí)學(xué)習(xí)重點(diǎn),或者說思維方式改變的重點(diǎn)在于:

1)對(duì)于REST的理解翅萤,這一點(diǎn)尤為重要恐疲,需要從設(shè)計(jì)、開發(fā)多個(gè)角色達(dá)成共識(shí)断序,很多時(shí)候都是對(duì)于HTTP 1.1協(xié)議以及REST的精髓不理解流纹,導(dǎo)致REST被「盲用」而產(chǎn)生一些不好的效果。

2)對(duì)于YAML的理解和對(duì)于JavaConfig的理解违诗,這兩點(diǎn)相對(duì)較為簡單漱凝,本質(zhì)上是簡化了xml文件,并提供等價(jià)的配置表述能力诸迟。

小結(jié)

SpringBoot繼承了原有Spring框架的優(yōu)秀基因茸炒;SpringBoot簡化了使用Spring的過程。

參考資料

1.http://projects.spring.io/spring-boot/

2.https://pivotal.io/spring-app-framework#buildanything

3.https://pivotal.io/

4.http://www.infoq.com/cn/articles/microframeworks1-spring-boot

5.http://blog.csdn.net/zeb_perfect/article/details/51945350

6.http://projects.spring.io/

7.SpringBoot官網(wǎng)文檔:
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阵苇,一起剝皮案震驚了整個(gè)濱河市壁公,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绅项,老刑警劉巖紊册,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異快耿,居然都是意外死亡囊陡,警方通過查閱死者的電腦和手機(jī)芳绩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撞反,“玉大人,你說我怎么就攤上這事遏片∴诤Γ” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵吮便,是天一觀的道長笔呀。 經(jīng)常有香客問我,道長线衫,這世上最難降的妖魔是什么凿可? 我笑而不...
    開封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮授账,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惨驶。我一直安慰自己白热,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開白布粗卜。 她就那樣靜靜地躺著屋确,像睡著了一般。 火紅的嫁衣襯著肌膚如雪续扔。 梳的紋絲不亂的頭發(fā)上攻臀,一...
    開封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音纱昧,去河邊找鬼刨啸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛识脆,可吹牛的內(nèi)容都是我干的设联。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灼捂,長吁一口氣:“原來是場噩夢啊……” “哼离例!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悉稠,我...
    開封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤宫蛆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后的猛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耀盗,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辑甜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袍冷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磷醋。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胡诗,靈堂內(nèi)的尸體忽然破棺而出邓线,到底是詐尸還是另有隱情,我是刑警寧澤煌恢,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布骇陈,位于F島的核電站,受9級(jí)特大地震影響瑰抵,放射性物質(zhì)發(fā)生泄漏你雌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一二汛、第九天 我趴在偏房一處隱蔽的房頂上張望婿崭。 院中可真熱鬧,春花似錦肴颊、人聲如沸氓栈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽授瘦。三九已至,卻和暖如春竟宋,著一層夾襖步出監(jiān)牢的瞬間提完,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來泰國打工丘侠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徒欣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓婉陷,卻偏偏與公主長得像帚称,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秽澳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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