本書以微服務的基本概念介紹性開篇, 逐步引出Java平臺下打造微服務的利器SpringBoot微框架, 從SpringBoot微框架的出身和源頭, 循序漸進,一步步為大家剖析了SpringBoot微框架的設計理念和原理,并對框架的重點功能和模塊進行了逐一講解。
“框架,體系,生態”, 三者循序漸進,相輔相成,本書*精彩的部分在于, 在大家對SpringBoot微框架已經有了基本的認識之后, 我們將一起探索如何基于SpringBoot微框架打造一套完備的微服務體系。
SpringBoot微框架依托Java平臺和Spring框架,擁有良好的可擴展性和可定制性,為了說明這一點,我們單獨開辟了一章內容,為大家介紹如何使用Scala和SpringBoot微框架來開發和交付相應的微服務,并且圍繞著Scala和SpringBoot如何打造相應的工具, 技術產品等支持來提高相應微服務的交付效率。
阿里與平安集團技術高層傾心傾情推薦,互聯網與互聯網金融行業各大技術掌門一致好評。
理論與實踐相結合、框架與生態相結合、技術與產品相結合,多視角、多維度、多場景地為大家深刻揭示了SpringBoot微服務框架和微服務架構體系的奧秘
前 言 Preface
為什么寫這本書忘了是2015年的哪一天,只記得幾個朋友跟友商的其他幾個做技術的朋友吃飯,并簡單做下技術交流。席間,友商的幾位朋友對SpringBoot框架實施微服務很感興趣,交談甚歡之際,我無意間開玩笑說:“是不是該考慮寫一本SpringBoot的書?”鐘倫甫(原淘寶聚石)同學隨口一句,“你倒是寫啊!”,得,以行踐言吧,誰讓你把話說出去了呢?當然,朋友的“熱切期盼”只是其一,微服務盛行也是本書寫作的一個契機, 希望本書成為國內第一本微服務相關的原創圖書,借此跟大家分享我對微服務的淺薄理解,并圍繞SpringBoot微框架打造一套微服務體系可能的探索方向,權作拋磚引玉。如果不同的思想可以借此激蕩和碰撞形成更多共鳴,則吾之幸甚。
因工作繁忙,只能抽取零碎時間躬耕于晨曦和月光之下,經點滴積累,才終成此書,希望大家閱讀愉快。
本書的主要內容和特色本書以介紹微服務的基本概念開篇,逐步引出Java平臺下打造微服務的利器—SpringBoot微框架。書中從SpringBoot微框架的“出身”開始,循序漸進,一步步為大家剖析SpringBoot微框架的設計理念和原理,并對框架的重點功能和模塊進行了逐一講解。
當然,這還只是“前戲”,本書最精彩的部分在于,在大家對SpringBoot微框架已經有了基本的認識之后,我們將一起探索如何基于SpringBoot微框架打造一套完備的微服務體系。因為如果沒有平臺化體系化的基礎支撐,空談微服務將無太大意義。
SpringBoot微框架依托Java平臺和Spring框架,擁有良好的可擴展性和可定制性,為了說明這一點,我們單獨開辟了一章內容,為大家介紹如何使用Scala和SpringBoot微框架來開發和交付相應的微服務,并且圍繞Scala和SpringBoot如何打造相應的工具,技術產品等支持來提高相應微服務的交付效率。
最后我會與大家一起對SpringBoot微框架的相關內容進行回顧和展望,以期溫故而知新。
本書總體上可以總結為三個關鍵詞,“框架、體系、生態”,三者循序漸進,相輔相成,在使用SpringBoot微框架打造自己特色的微服務體系和技術生態之時,希望大家記住這三個關鍵詞。
本書面向的讀者本書希望面向的讀者當然是那些對SpringBoot微框架感興趣的同學,如果你想了解SpringBoot微框架,并且嘗試進一步深入定制該框架以滿足自己團隊和公司的需要,也希望會對你有所啟發。
除此之外還包括:
Java平臺上的廣大研發同學,可以借此書了解業界微服務相關的最新動態。
其他平臺上的廣大研發同學,可借此書“管中窺豹”,了解微服務的一般體系和生態建設,對比并引入自身的技術和微服務體系建設之中。
脫離技術一線已久的技術負責人。
如何閱讀本書本書采用循序漸進的形式編寫,所以順序閱讀是推薦的閱讀方式。
勘誤和資源鑒于一家之言且編撰倉促,難免會有所紕漏,觀點有失偏頗,所以,我在github網站上專門新建了一個issue項目(https://github.com/fujohnwang/unveil-springboot-feedbacks),如果大家在閱讀此書之后發現有哪些錯誤和疑問,或者改進建議,可以在此項目上新建issue來表達自己的觀點和建議。如果時間不充裕,我會適時地選擇性給予答復,當然,更希望大家可以通過issue展開討論,互相切磋和解答疑問 。
致謝除了最初的一句戲言,鐘倫甫同學也是本書的第一位讀者,幫助審稿并提出很多建議,所以,本書得以出版,第一需要感謝的就是鐘倫甫同學。
其次,我要感謝華章出版社的楊福川和李藝,福川兄在接到我的出版意向之后,快速地跟進和落實,在本書初稿編寫完成時馬上著手出版,諸位得以在2016年上半年就手捧此書,皆需感謝福川兄的重點關注和推進。
最后要感謝我的父母,感謝他們把我帶到這個世界上并讓我做自己想做和要做的事情。
推薦序1
2015年技術圈最火的名詞大概就是微服務了。國內外的互聯網技術會議上,但凡分享題目中包含“MicroService”,不論內容質量如何,一定人山人海、摩肩接踵。
追本溯源,服務化的架構思想十年前就是軟件架構的標準范式。淘寶和阿里在2007年左右就開始奠定了大規模服務化架構的基礎,經過幾代架構師的努力,有了今天承載雙十一規模的商業操作系統。這中間誕生的很多優秀的Java中間件也成為開源界備受追崇的范例。
但是對于很多中小企業而言,SpringBoot會是另一個性價比極高的選擇。福強的這本書出現得恰逢其時,既有體系化的理論又不乏有價值的實踐。對于想了解微服務和SpringBoot的架構師而言,是難得的修煉秘籍。
南天(本名是莊卓然) 阿里巴巴資深總監
推薦序2
多年前,第一次見福強,就知道他在寫書,那時就是關于Spring的書籍。等到出書后,我翻看之下,發現福強寫得非常實用。
時隔若干年,福強又來信告知有新作問世,這是他經歷幾年的大型網站實踐之后,在創業階段寫的書。在這個階段還能堅持寫作的人非常少,足以說明他對技術的執著和堅持。有了成熟大型網站和創業階段的實踐經驗,本書不僅是SpringBoot的指南,還是各種實戰經驗的提煉和總結。福強不僅在Java,在Scala、Golang方面都有頗深的理解,這種跨語言方面對技術的融會貫通也為整個構建過程起著催化劑的作用。福強這次給大家帶來的這本書,從不同角度對微服務這一熱門話題進行了介紹和探討,同時加入了自己多年的實踐經驗,值得一讀。
Eric(中文名是王齊) 平安好醫生CTO
王福強,資深Java技術專家和架構師,具有多年一線開發經驗和技術團隊管理經驗。在計算機語言、并發與并行編程、分布式系統設計與開發、大數據、實時計算等領域都積累了豐富的經驗。先后在英極、花旗、阿里巴巴等金融和互聯網企業任職,主導和參與了多個重要的大型項目。現任挖財技術VP兼首席架構師。
推薦序1
推薦序2
序言
前言
第1章 了解微服務 1
1.1 什么是微服務 1
1.2 微服務因何而生 2
1.3 微服務會帶來哪些好處 4
1.3.1 獨立,獨立,還是獨立 4
1.3.2 多語言生態 6
1.4 微服務會帶來哪些挑戰 8
1.5 本章小結 9
第2章 飲水思源:回顧與探索Spring框架的本質 11
2.1 Spring框架的起源 11
2.2 Spring IoC其實很簡單 12
2.3 了解一點兒JavaConfig 14
2.3.1 那些高曝光率的Annotation 17
2.4 本章小結 18
第3章 SpringBoot的工作機制 19
3.1 SpringBoot初體驗 19
3.2 @SpringBootApplication背后的秘密 20
3.2.1 @Configuration創世紀 21
3.2.2 @EnableAutoConfiguration的功效 22
3.2.3 可有可無的@ComponentScan 25
3.3 SpringApplication:SpringBoot程序啟動的一站式解決方案 26
3.3.1 深入探索SpringApplication執行流程 27
3.3.2 SpringApplicationRunListener 30
3.3.3 ApplicationListener 31
3.3.4 ApplicationContextInitializer 32
3.3.5 CommandLineRunner 33
3.4 再談自動配置 34
3.4.1 基于條件的自動配置 34
3.4.2 調整自動配置的順序 35
3.5 本章小結 35
第4章 了解紛雜的spring-boot-starter 37
4.1 應用日志和spring-boot-starter-logging 39
4.2 快速Web應用開發與spring-boot-starter-web 40
4.2.1 項目結構層面的約定 41
4.2.2 SpringMVC框架層面的約定和定制 41
4.2.3 嵌入式Web容器層面的約定和定制 42
4.3 數據訪問與spring-boot-starter-jdbc 43
4.3.1 SpringBoot應用的數據庫版本化管理 46
4.4 spring-boot-starter-aop及其使用場景說明 48
4.4.1 spring-boot-starter-aop在構建spring-boot-starter-metrics自定義模塊中的應用 49
4.5 應用安全與spring-boot-starter-security 58
4.5.1 了解SpringSecurity基本設計 61
4.5.2 進一步定制spring-boot-starter-security 66
4.6 應用監控與spring-boot-starter-actuator 68
4.6.1 自定義應用的健康狀態檢查 70
4.6.2 開放的endpoints才真正“有用” 73
4.6.3 用還是不用,這是個問題 75
4.7 本章小結 77
第5章 SpringBoot微服務實踐探索 79
5.1 使用SpringBoot構建微服務 79
5.1.1 創建基于Dubbo框架的SpringBoot微服務 80
5.1.2 使用SpringBoot快速構建Web API 91
5.1.3 使用SpringBoot構建其他形式的微服務 104
5.2 SpringBoot微服務的發布與部署 110
5.2.1 spring-boot-starter的發布與部署方式 112
5.2.2 基于RPM的發布與部署方式 115
5.2.3 基于Docker的發布與部署方式 120
5.3 SpringBoot微服務的注冊與發現 124
5.4 SpringBoot微服務的監控與運維 127
5.4.1 推還是拉,這一直是個問題 131
5.4.2 從局部性觸發式報警到系統性智能化報警 132
5.5 SpringBoot微服務的安全與防護 133
5.6 SpringBoot微服務體系的脊梁:發布與部署平臺 135
5.7 本章小結 138
第6章 SpringBoot與Scala 139
6.1 使用Maven構建和發布基于SpringBoot的Scala應用 140
6.1.1 進一步簡化基于Maven的Scala項目創建 146
6.1.2 進一步簡化基于Scala的Web API開發 167
6.2 使用SBT構建和發布基于SpringBoot的Scala應用 174
6.2.1 探索基于SBT的SpringBoot應用開發模式 175
6.2.2 探索基于SBT的SpringBoot應用發布策略 181
6.3 本章小結 184
第7章 SpringBoot總結與展