内容简介

精通Spring Boot 2.0》详细阐述了与SpringBoot2.0相关的基本解决方案,主要包括定制auto-configuration、SpringCLI和Actuator、SpringCloud和配置操作、SpringCloudNetflix和ServiceDiscovery、构建SpringBootRESTful微服务、利用NetflixZuul创建API网关、利用Feign客户端简化HTTPAPI、构建事件驱动和异步响应式系统、利用Hystrix和Turbine构建弹性系统、测试SpringBoot应用程序、微服务的容器化、API管理器、云部署(AWS)、生产服务监视和z佳实践等内容。此外,《精通Spring Boot 2.0》还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

精通Spring Boot 2.0》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。

目录

目录

第1章SpringBoot2.01

1.1SpringBoot概述2

1.2利用SpringBoot简化应用程序开发3

1.3SpringBoot中的核心组件5

1.3.1SpringBootStarter5

1.3.2SpringBootStarterParentPOM7

1.3.3SpringBootauto-configuration7

1.3.4启用SpringBootauto-configuration9

1.3.5SpringBootCLI11

1.3.6SpringBootActuator11

1.4设置SpringBoot工作区12

1.4.1利用Maven设置SpringBoot13

1.4.2利用Gradle设置SpringBoot13

1.5开发第一个SpringBoot应用程序15

1.5.1使用Web界面15

1.5.2利用STSIDE创建SpringBoot项目17

1.6实现REST服务19

1.7SpringBoot2.0中的新特性22

1.8本章小结22

第2章定制auto-configuration25

2.1理解auto-configuration26

2.2定制SpringBoot27

2.2.1利用SpringBoot属性进行定制27

2.2.2替换已生成的Bean29

2.2.3禁用特定的auto-configuration类29

2.2.4修改库的依赖关系30

2.3基于属性的配置外部化31

2.3.1属性的评估顺序31

2.3.2重命名Spring应用程序中的application.properties32

2.4外部配置应用程序属性33

2.5基于日志记录的调优35

2.6YAML配置文件36

2.6.1针对属性的YAML36

2.6.2单一YAML文件中的多个属性37

2.7定制应用程序错误页面37

2.8本章小结39

第3章SpringCLI和Actuator41

3.1使用SpringBootCLI41

3.1.1安装SpringBootCLI42

3.1.2从安装文件中手动安装SpringBootCLI42

3.1.3使用SDKMAN!安装SpringBootCLI43

3.1.4利用OSXHomebrew安装SpringBootCLI43

3.2使用Initializr44

3.3SpringBootActuator48

3.3.1在应用程序中启用SpringBootActuator49

3.3.2分析Actuator的端点49

3.3.3显示配置细节51

3.3.4显示指标端点56

3.3.5显示应用程序信息57

3.3.6关闭应用程序59

3.3.7自定义Actuator端点59

3.3.8创建一个自定义端点64

3.4Actuator端点的安全性66

3.5SpringBoot2.x中的Actuator67

3.6本章小结68

第4章SpringCloud和配置操作69

4.1原生云应用程序架构69

4.1.1微服务架构71

4.1.2微服务的优点72

4.1.3微服务面临的挑战73

4.2SpringCloud简介74

4.2.1云和微服务程序的构造块74

4.2.2SpringCloud应用76

4.3配置SpringCloud应用程序77

4.4创建配置生成器—SpringCloudConfigServer78

4.5实现CloudConfigServer79

4.5.1配置application.properties文件80

4.5.2创建Git存储库作为配置存储80

4.6利用模式配置多个存储库83

4.6.1身份验证84

4.6.2force-pull属性85

4.7创建SpringCloud客户端85

4.8本章小结87

第5章SpringCloudNetflix和ServiceDiscovery89

5.1SpringCloudNetflix简介89

5.2微服务架构中的ServiceDiscovery90

5.3实现ServiceDiscovery—EurekaServer92

5.3.1Maven构建配置文件92

5.3.2Gradle构建配置文件93

5.3.3启用Eureka服务器作为DiscoveryService服务器94

5.4实现ServiceDiscovery—Eureka客户端96

5.4.1添加Maven依赖关系配置96

5.4.2Gradle构建配置98

5.5利用Eureka注册客户端99

5.5.1使用REST服务102

5.5.2使用EurekaClient102

5.5.3FeignClient107

5.6本章小结111

第6章构建SpringBootRESTful微服务113

6.1基于SpringBoot的微服务113

6.1.1bootstrap.yml和application.yml简介114

6.1.2简单的微服务示例115

6.2SpringData简介128

6.2.1ApacheIgnite存储库129

6.2.2SpringDataMongoDB129

6.2.3SpringDataJPA130

6.3本章小结130

第7章利用NetflixZuul创建API网关133

7.1API网关模式需求133

7.1.1APIGateway模式的优点135

7.1.2APIGateway的一些缺点135

7.1.3APIGateway模式组件135

7.2利用NetflixZuulProxy实现APIGateway136

7.2.1利用Maven依赖关系包含Zuul137

7.2.2启用Zuul服务代理137

7.2.3配置Zuul属性138

7.2.4添加过滤器141

7.3本章小结144

第8章利用Feign客户端简化HTTPAPI145

8.1Feign基础知识145

8.2在云应用程序中包含Feign148

8.2.1重载Feign的默认配置153

8.2.2创建Feign客户端155

8.2.3Feign继承机制156

8.2.4多重继承156

8.3Feign客户端的高级应用157

8.4异常处理158

8.5自定义编码器和解码器159

8.5.1自定义编码器160

8.5.2自定义解码器161

8.6Feign和Hystrix161

8.7Feign客户端单元测试163

8.8本章小结164

第9章构建事件驱动和异步响应式系统165

9.1事件驱动型架构模式165

9.1.1调停者拓扑165

9.1.2代理拓扑166

9.2响应式编程简介167

9.2.1SpringReactive167

9.2.2ReactiveX168

9.3命令查询的责任分离简介168

9.3.1EventSourcing模式简介170

9.3.2最终一致性171

9.4构建事件驱动型响应式异步系统172

9.5SpringCloudStreaming简介173

9.5.1向应用程序中添加Kafka174

9.5.2安装和运行Kafka175

9.5.3Kafka配置属性175

9.5.4用于写入Kafka的服务176

9.5.5RestAPI控制器177

9.5.6监听Kafka主题177

9.6本章小结181

第10章利用Hystrix和Turbine构建弹性系统183

10.1断路器模式184

10.2使用Hystrixlibrary186

10.3在应用程序中配置Hystrix187

10.3.1Maven依赖关系188

10.3.2启用断路器188

10.3.3向服务中添加Hystrix注解189

10.3.4错误传递192

10.4在客户服务中实现REST控制器192

10.5构建和测试客户服务195

10.6自定义默认的配置项196

10.7HystrixMetricsStream198

10.8在项目中实现HystrixDashboard199

10.9Turbine仪表盘201

10.10基于Hystrix和Feign的REST使用者204

10.11本章小结206

第11章测试SpringBoot应用程序207

11.1测试驱动开发207

11.2单元测试机制208

11.2.1单元测试的优点211

11.2.2单元测试的缺点212

11.2.3其他模拟库212

11.3集成测试212

11.3.1Spring测试的优点214

11.3.2激活测试类的配置214

11.4SpringBoot应用程序的JUnit测试214

11.5使用Mockito模拟服务216

11.6测试RESTful服务契约的Postman217

11.7本章小结220

第12章微服务的容器化221

12.1微服务架构的容器222

12.1.1虚拟机和容器222

12.1.2容器方案的优点224

12.1.3面向容器方案的缺点224

12.2Docker简介225

12.2.1安装Docker226

12.2.2在Linux上安装Docker226

12.2.3在Windows中安装Docker227

12.2.4Docker架构229

12.2.5Docker引擎231

12.2.6Docker容器232

12.2.7编写Dockerfile233

12.3Docker化SpringBoot应用程序235

12.4利用Maven创建Docker镜像239

12.5DockerCompose简介240

12.5.1安装DockerCompose241

12.5.2使用DockerCompose242

12.5.3编写docker-compose文件242

12.5.4基于docker-compose文件的编排操作244

12.5.5利用docker-compose和负载平衡扩展容器247

12.6Kubernetes简介248

12.7本章小结249

第13章API管理器251

13.1API管理251

13.1.1API管理软件的优点252

13.1.2API管理工具252

13.2速率限制252

13.3KONG简介253

13.3.1基于KONG架构的微服务RESTAPI254

13.3.2未采用KONG架构的API应用255

13.3.3安装KONG255

13.3.4使用KONGAPI257

13.4Swagger265

13.4.1Swagger应用265

13.4.2在微服务中使用Swagger266

13.4.3Swagger的优点277

13.5本章小结278

第14章云部署(AWS)279

14.1AWSEC2实例279

14.2AWS上的微服务架构284

14.3在AWSEC2上安装Docker289

14.4在AWSEC2上运行微服务291

14.5本章小结293

第15章生产服务监视和最佳实践295

15.1监视容器295

15.2日志机制所面临的挑战295

15.3微服务架构的中心日志方案297

15.3.1基于ELK栈的日志聚合299

15.3.2使用Sleuth的请求跟踪306

15.3.3基于Zipkin的请求跟踪310

15.4本章小结315

前言/序言

前言

Pivotal最近发布了SpringBoot2.0,以支持响应式编程和云计算。SpringBoot2.0引入了诸多新特性和增强方案,《精通Spring Boot 2.0》也将对此进行逐一介绍。另外,《精通Spring Boot 2.0》还将引领读者深入理解SpringBoot和云微服务架构方面的知识。

当前,许多公司已经将SpringBoot作为企业应用程序开发的主要框架,对于采用微服务架构的RESTAPI尤其如此。对于SpringBoot来说,我们并不需要使用外部企业服务器。《精通Spring Boot 2.0》旨在阐述本地云应用程序背后所采用的常见设计方案,以及如何在SpringBoot2.0的SpringCloud模块中对其予以实现。其间,作者还进一步总结了分布式设计日志记录机制和应用程序开发过程中的一些最佳实践方案。

精通Spring Boot 2.0》共15章,涵盖了从基于微服务的云应用程序开发到微服务的部署(使用虚拟机或Docker等容器)的方方面面,包括如何使用Rest模板、SpringCloudNetflixFeign实现微服务架构中服务间的通信;如何使用SpringCloudStream和Kafka构建一个事件驱动的弹性系统。这一部分内容还向读者展示了如何使用Hystrix和Turbine进行监视。最后,《精通Spring Boot 2.0》还将解释如何测试和构建API,并将其部署到容器(如Docker)以及云中(如AWS)。

适用读者

精通Spring Boot 2.0》适用于各种层次的Java开发人员,他们希望学习SpringBoot和SpringCloud并将其作为基于企业分布式云的应用程序。因此,当采用基于SpringBoot2.0和SpringCloud的微服务架构时,《精通Spring Boot 2.0》对企业级Java和Spring开发人员来说十分有用,进而帮助他们深入理解本地云设计模式,以及微服务体系结构如何解决分布式应用程序中本地云基础设施中的常见设计问题,并可将《精通Spring Boot 2.0》中的示例结合自己的项目加以使用。在阅读《精通Spring Boot 2.0》之前,读者应具备CoreJava、SpringCoreFramework以及SpringBoot方面的基础知识。

精通Spring Boot 2.0》内容

第1章整体介绍了SpringBoot2.0及其新特性,包括某些核心组件,以及SpringBoot的某些改进措施。

第2章阐述了SpringBoot的自动配置特性,同时进一步解释了如何覆盖默认的自动配置机制。

第3章通过多种方式创建SpringBoot应用程序,涉及SpringBoot的Web接口、STSIDE以及SpringBootCLI。本章深入讨论了SpringBootCLI,以及如何在机器设备上安装SpringBootCLI,并以此创建SpringBoot应用程序。另外,本章还将通过Actuator介绍SpringBoot的生产环境特性。

第4章讨论如何构建配置服务器,并向客户端应用程序提供Git存储库中的一组配置文件。在本章中,读者将学习到与SpringCloud配置服务相关的知识,以及如何构建和使用配置服务。

第5章介绍SpringCloudNetflix和基于Eureka的ServiceDiscovery。

第6章构建一个RESTful原子微服务,该服务使用SpringCloud和Spring数据在内存数据库(HSQL或H2)上执行CRUD操作,以使该服务能够向Eureka服务器进行服务发现注册。

第7章探讨微服务通信的API网关模式,无论是来自UI组件还是来自内部服务调用。另外,还将使用NetflixAPIZuul实现一个API网关,并了解如何在应用程序中设置Zuul代理。

第8章对Feign及其工作方式加以介绍,其中包含了针对业务需求相关的、详细的Feign扩展/定制方式,其中展示了自定义编码器、解码器、Hystrix和单元测试异常处理方面的参考实现。

第9章讲述了如何采用事件驱动架构并作为本地云应用程序构建事件驱动型微服务。对于分布式系统中的数据一致性处理,本章将考查一些重要的概念和主题。

第10章通过参考实现探讨断路器模式,其中涉及NetflixHystrix库的使用,配置Turbine仪表盘以整合来自多项服务的Hystrix流。

第11章通过JUnit和Mockito讨论SpringBootServices单元测试。其中,全部参考实现都将完成相应的单元测试。因此,本章内容更多地是整合了微服务的各种测试机制。

第12章介绍容器,并在Docker中运行第11章中构建的服务、编写Dockerfile、使用docker-compose编排容器,并在Kubernetes中提供编排示例。

第13章探讨分布式系统中的API管理,设置KONG开源API管理器、在KONGAPI管理器中配置前述章节中的API端点、针对API标准引入Swagger。最后,本章还将展示速率限制以及基于KONG的日志记录。

第14章介绍如何在AWSEC2实例中手动部署微服务,以及CloudFormation脚本的应用方式。

第15章详细介绍构建分布式系统的一些最佳实践,并深入讨论生产环境下服务的性能监控方案。

软件环境和资源下载

精通Spring Boot 2.0》内容可供读者独立阅读。但是,为了更好地理解书中的相关示例,读者需要安装Java8。对此,可访问http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载Java8。此外,读者还可根据个人喜好安装相应的IDE,如SoftwareSpringToolSuite。读者可访问https://spring.io/tools/sts/all,并根据个人操作系统下载SpringToolSuite(STS)的最新版本。Java8和STS也适用于其他平台,如Windows、macOS和Linux。

读者可访问http://www.packtpub.com并通过个人账户下载示例代码文件。另外,在http://www.packtpub.com/support中注册成功后,我们将以电子邮件的方式将相关文件发与读者。

读者可根据下列步骤下载代码文件:

(1)利用电子邮件地址和密码登录或注册我们的网站。

(2)选择SUPPORT选项卡。

(3)单击CodeDownloads&Errata。

(4)在Serach文本框中输入书名。

当文件下载完毕后,确保使用下列最新版本软件解压文件夹:

?Windows系统下的WinRAR/7-Zip。

?Mac系统下的Zipeg/iZip/UnRarX。

?Linux系统下的7-Zip/PeaZip。

另外,读者还可访问GitHub获取《精通Spring Boot 2.0》的代码包,对应网址为https://github.com/PacktPublishing/Mastering-Spring-Boot-2.0。此外,读者还可访问https://github.com/PacktPublishing/以了解丰富的代码和视频资源。

精通Spring Boot 2.0》约定

精通Spring Boot 2.0》通过不同的文本风格区分相应的信息类型。下面通过一些示例对此类风格以及具体含义的解释予以展示。

代码块如下所示:

@RestController

classHelloController{

@GetMapping("/")

Stringhello(){

"HelloWorld!!!"

}

}

当某个代码块希望引起读者的足够重视时,一般会采用黑体表示,如下所示:

org.springframework.boot

spring-boot-starter-web

命令行输入或输出则采用下列方式表达:

$SpringrunHelloController.groovy

图标表示较为重要的说明事项。

图标表示提示信息和操作技巧。

读者反馈和客户支持

欢迎读者对《精通Spring Boot 2.0》的建议或意见予以反馈。

对此,读者可向feedback@packtpub.com发送邮件,并以书名作为邮件标题。若读者对《精通Spring Boot 2.0》有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。

若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作,则可访问www.packtpub.com/authors。

勘误表

尽管我们在最大程度上做到尽善尽美,但错误依然在所难免。如果读者发现谬误之处,无论是文字错误抑或是代码错误,还望不吝赐教。对此,读者可访问http://www.packtpub.com/submit-errata,选取对应书籍,单击ErrataSubmissionForm超链接,并输入相关问题的详细内容。

版权须知

一直以来,互联网上的版权问题从未间断,Packt出版社对此类问题异常重视。若读者在互联网上发现《精通Spring Boot 2.0》任意形式的副本,请告知网络地址或网站名称,我们将对此予以处理。关于盗版问题,读者可发送邮件至copyright@packtpub.com。

问题解答

若读者对《精通Spring Boot 2.0》有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。


其他推荐