前 言
为什么写这本书
忘了是2015年的哪一天,只记得几个朋友跟友商的其他几个做技术的朋友吃饭,并简单做下技术交流。席间,友商的几位朋友对SpringBoot框架实施微服务很感兴趣,交谈甚欢之际,我无意间开玩笑说:“是不是该考虑写一本SpringBoot的书?”钟伦甫(原淘宝聚石)同学随口一句,“你倒是写啊!”,得,以行践言吧,谁让你把话说出去了呢?
当然,朋友的“热切期盼”只是其一,微服务盛行也是本书写作的一个契机, 希望本书成为国内第一本微服务相关的原创图书,借此跟大家分享我对微服务的浅薄理解,并围绕SpringBoot微框架打造一套微服务体系可能的探索方向,权作抛砖引玉。如果不同的思想可以借此激荡和碰撞形成更多共鸣,则吾之幸甚。
因工作繁忙,只能抽取零碎时间躬耕于晨曦和月光之下,经点滴积累,才终成此书,希望大家阅读愉快。
本书的主要内容和特色
本书以介绍微服务的基本概念开篇,逐步引出Java平台下打造微服务的利器—SpringBoot微框架。书中从SpringBoot微框架的“出身”开始,循序渐进,一步步为大家剖析SpringBoot微框架的设计理念和原理,并对框架的重点功能和模块进行了逐一讲解。
当然,这还只是“前戏”,本书最精彩的部分在于,在大家对SpringBoot微框架已经有了基本的认识之后,我们将一起探索如何基于SpringBoot微框架打造一套完备的微服务体系。因为如果没有平台化体系化的基础支撑,空谈微服务将无太大意义。
SpringBoot微框架依托Java平台和Spring框架,拥有良好的可扩展性和可定制性,为了说明这一点,我们单独开辟了一章内容,为大家介绍如何使用Scala和SpringBoot微框架来开发和交付相应的微服务,并且围绕Scala和SpringBoot如何打造相应的工具,技术产品等支持来提高相应微服务的交付效率。
最后我会与大家一起对SpringBoot微框架的相关内容进行回顾和展望,以期温故而知新。
本书总体上可以总结为三个关键词,“框架、体系、生态”,三者循序渐进,相辅相成,在使用SpringBoot微框架打造自己特色的微服务体系和技术生态之时,希望大家记住这三个关键词。
本书面向的读者
本书希望面向的读者当然是那些对SpringBoot微框架感兴趣的同学,如果你想了解SpringBoot微框架,并且尝试进一步深入定制该框架以满足自己团队和公司的需要,也希望会对你有所启发。
除此之外还包括:
Java平台上的广大研发同学,可以借此书了解业界微服务相关的最新动态。
其他平台上的广大研发同学,可借此书“管中窥豹”,了解微服务的一般体系和生态建设,对比并引入自身的技术和微服务体系建设之中。
脱离技术一线已久的技术负责人。
如何阅读本书
本书采用循序渐进的形式编写,所以顺序阅读是推荐的阅读方式。
勘误和资源
鉴于一家之言且编撰仓促,难免会有所纰漏,观点有失偏颇,所以,我在github网站上专门新建了一个issue项目,如果大家在阅读此书之后发现有哪些错误和疑问,或者改进建议,可以在此项目上新建issue来表达自己的观点和建议。如果时间不充裕,我会适时地选择性给予答复,当然,更希望大家可以通过issue展开讨论,互相切磋和解答疑问 。
致谢
除了最初的一句戏言,钟伦甫同学也是本书的第一位读者,帮助审稿并提出很多建议,所以,本书得以出版,第一需要感谢的就是钟伦甫同学。
其次,我要感谢华章出版社的杨福川和李艺,福川兄在接到我的出版意向之后,快速地跟进和落实,在本书初稿编写完成时马上着手出版,诸位得以在2016年上半年就手捧此书,皆需感谢福川兄的重点关注和推进。
最后要感谢我的父母,感谢他们把我带到这个世界上并让我做自己想做和要做的事情。
目 录
前言
第1章 了解微服务
1.1 什么是微服务
1.2 微服务因何而生
1.3 微服务会带来哪些好处
1.3.1 独立,独立,还是独立
1.3.2 多语言生态
1.4 微服务会带来哪些挑战
1.5 本章小结
第2章 饮水思源:回顾与探索Spring框架的本质
2.1 Spring框架的起源
2.2 Spring IoC其实很简单
2.3 了解一点儿JavaConfig
2.3.1 那些高曝光率的Annotation
2.4 本章小结
第3章 SpringBoot的工作机制
3.1 SpringBoot初体验
3.2 @SpringBootApplication背后的秘密
3.2.1 @Configuration创世纪
3.2.2 @EnableAutoConfiguration的功效
3.2.3 可有可无的@ComponentScan
3.3 SpringApplication:SpringBoot程序启动的一站式解决方案
3.3.1 深入探索SpringApplication执行流程
3.3.2 SpringApplicationRunListener
3.3.3 ApplicationListener
3.3.4 ApplicationContextInitializer
3.3.5 CommandLineRunner
3.4 再谈自动配置
3.4.1 基于条件的自动配置
3.4.2 调整自动配置的顺序
3.5 本章小结
第4章 了解纷杂的spring-boot-starter
4.1 应用日志和spring-boot-starter-logging
4.2 快速Web应用开发与spring-boot-starter-web
4.2.1 项目结构层面的约定
4.2.2 SpringMVC框架层面的约定和定制
4.2.3 嵌入式Web容器层面的约定和定制
4.3 数据访问与spring-boot-starter-jdbc
4.3.1 SpringBoot应用的数据库版本化管理
4.4 spring-boot-starter-aop及其使用场景说明
4.4.1 spring-boot-starter-aop在构建spring-boot-starter-metrics自定义模块中的应用
4.5 应用安全与spring-boot-starter-security
4.5.1 了解SpringSecurity基本设计
4.5.2 进一步定制spring-boot-starter-security
4.6 应用监控与spring-boot-starter-actuator
4.6.1 自定义应用的健康状态检查
4.6.2 开放的endpoints才真正“有用”
4.6.3 用还是不用,这是个问题
4.7 本章小结
第5章 SpringBoot微服务实践探索
5.1 使用SpringBoot构建微服务
5.1.1 创建基于Dubbo框架的SpringBoot微服务
5.1.2 使用SpringBoot快速构建Web API
5.1.3 使用SpringBoot构建其他形式的微服务
5.2 SpringBoot微服务的发布与部署
5.2.1 spring-boot-starter的发布与部署方式
5.2.2 基于RPM的发布与部署方式
5.2.3 基于Docker的发布与部署方式
5.3 SpringBoot微服务的注册与发现
5.4 SpringBoot微服务的监控与运维
5.4.1 推还是拉,这一直是个问题
5.4.2 从局部性触发式报警到系统性智能化报警
5.5 SpringBoot微服务的安全与防护
5.6 SpringBoot微服务体系的脊梁:发布与部署平台
5.7 本章小结
第6章 SpringBoot与Scala
6.1 使用Maven构建和发布基于SpringBoot的Scala应用
6.1.1 进一步简化基于Maven的Scala项目创建
6.1.2 进一步简化基于Scala的Web API开发
6.2 使用SBT构建和发布基于SpringBoot的Scala应用
6.2.1 探索基于SBT的SpringBoot应用开发模式
6.2.2 探索基于SBT的SpringBoot应用发布策略
6.3 本章小结
第7章 SpringBoot总结与展望