猜你喜欢
精通Spring Boot 2.0

精通Spring Boot 2.0

书籍作者:迪内什·拉吉普特 ISBN:9787302530244
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:4226
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

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

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


前言

前 言

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

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

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

适用读者

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

本书内容

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

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

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

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

第5章介绍Spring Cloud Netflix和基于Eureka的 Service Discovery。

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

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

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

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

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

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

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

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

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

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

软件环境和资源下载

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

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

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

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

(2)选择SUPPORT选项卡。

(3)单击Code Downloads & Errata。

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

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

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

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

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

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

本书约定

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

代码块如下所示:


@RestController

class HelloController {

@GetMapping("/")

String hello() {

"Hello World!!!"

}

}


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


org.springframework.boot

spring-boot-starter-web


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


$ Spring run HelloController.groovy


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

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

读者反馈和客户支持

欢迎读者对本书的建议或意见予以反馈。

对此,读者可发送邮件,并以书名作为邮件标题。若读者对本书有任何疑问,均可发送邮件,我们将竭诚为您服务。

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

勘误表

尽管我们在最大程度上做到尽善尽美,但错误依然在所难免。如果读者发现谬误之处,无论是文字错误抑或是代码错误,还望不吝赐教。

版权须知

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

目录

目 录

第1章 Spring Boot 2.0 1

1.1 Spring Boot概述 2

1.2 利用Spring Boot简化应用程序开发 3

1.3 Spring Boot中的核心组件 5

1.3.1 Spring Boot Starter 5

1.3.2 Spring Boot Starter Parent POM 7

1.3.3 Spring Boot auto-configuration 7

1.3.4 启用Spring Boot auto-configuration 9

1.3.5 Spring Boot CLI 11

1.3.6 Spring Boot Actuator 11

1.4 设置Spring Boot工作区 12

1.4.1 利用Maven设置Spring Boot 13

1.4.2 利用Gradle设置Spring Boot 13

1.5 开发第一个Spring Boot应用程序 15

1.5.1 使用Web界面 15

1.5.2 利用STS IDE创建Spring Boot项目 17

1.6 实现REST服务 19

1.7 Spring Boot 2.0中的新特性 22

1.8 本章小结 22

第2章 定制auto-configuration 25

2.1 理解auto-configuration 26

2.2 定制Spring Boot 27

2.2.1 利用Spring Boot属性进行定制 27

2.2.2 替换已生成的Bean 29

2.2.3 禁用特定的auto-configuration类 29

2.2.4 修改库的依赖关系 30

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

2.3.1 属性的评估顺序 31

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

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

2.5 基于日志记录的调优 35

2.6 YAML配置文件 36

2.6.1 针对属性的YAML 36

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

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

2.8 本章小结 39

第3章 Spring CLI和Actuator 41

3.1 使用Spring Boot CLI 41

3.1.1 安装Spring Boot CLI 42

3.1.2 从安装文件中手动安装Spring Boot CLI 42

3.1.3 使用SDKMAN!安装Spring Boot CLI 43

3.1.4 利用OSX Homebrew安装Spring Boot CLI 43

3.2 使用Initializr 44

3.3 Spring Boot Actuator 48

3.3.1 在应用程序中启用Spring Boot Actuator 49

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.4 Actuator端点的安全性 66

3.5 Spring Boot 2.x中的Actuator 67

3.6 本章小结 68

第4章 Spring Cloud和配置操作 69

4.1 原生云应用程序架构 69

4.1.1 微服务架构 71

4.1.2 微服务的优点 72

4.1.3 微服务面临的挑战 73

4.2 Spring Cloud简介 74

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

4.2.2 Spring Cloud应用 76

4.3 配置Spring Cloud应用程序 77

4.4 创建配置生成器—Spring Cloud Config Server 78

4.5 实现Cloud Config Server 79

4.5.1 配置application.properties文件 80

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

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

4.6.1 身份验证 84

4.6.2 force-pull属性 85

4.7 创建Spring Cloud客户端 85

4.8 本章小结 87

第5章 Spring Cloud Netflix和Service Discovery 89

5.1 Spring Cloud Netflix简介 89

5.2 微服务架构中的Service Discovery 90

5.3 实现Service Discovery—Eureka Server 92

5.3.1 Maven构建配置文件 92

5.3.2 Gradle构建配置文件 93

5.3.3 启用Eureka服务器作为Discovery Service服务器 94

5.4 实现Service Discovery—Eureka客户端 96

5.4.1 添加Maven依赖关系配置 96

5.4.2 Gradle构建配置 98

5.5 利用Eureka注册客户端 99

5.5.1 使用REST服务 102

5.5.2 使用EurekaClient 102

5.5.3 Feign Client 107

5.6 本章小结 111

第6章 构建Spring Boot RESTful微服务 113

6.1 基于Spring Boot的微服务 113

6.1.1 bootstrap.yml和application.yml简介 114

6.1.2 简单的微服务示例 115

6.2 Spring Data简介 128

6.2.1 Apache Ignite存储库 129

6.2.2 Spring Data MongoDB 129

6.2.3 Spring Data JPA 130

6.3 本章小结 130

第7章 利用Netflix Zuul创建API网关 133

7.1 API网关模式需求 133

7.1.1 API Gateway模式的优点 135

7.1.2 API Gateway的一些缺点 135

7.1.3 API Gateway模式组件 135

7.2 利用Netflix Zuul Proxy实现API Gateway 136

7.2.1 利用Maven依赖关系包含Zuul 137

7.2.2 启用Zuul服务代理 137

7.2.3 配置Zuul属性 138

7.2.4 添加过滤器 141

7.3 本章小结 144

第8章 利用Feign客户端简化HTTP API 145

8.1 Feign基础知识 145

8.2 在云应用程序中包含Feign 148

8.2.1 重载Feign的默认配置 153

8.2.2 创建Feign客户端 155

8.2.3 Feign继承机制 156

8.2.4 多重继承 156

8.3 Feign客户端的高级应用 157

8.4 异常处理 158

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

8.5.1 自定义编码器 160

8.5.2 自定义解码器 161

8.6 Feign和Hystrix 161

8.7 Feign客户端单元测试 163

8.8 本章小结 164

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

9.1 事件驱动型架构模式 165

9.1.1 调停者拓扑 165

9.1.2 代理拓扑 166

9.2 响应式编程简介 167

9.2.1 Spring Reactive 167

9.2.2 ReactiveX 168

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

9.3.1 Event Sourcing模式简介 170

9.3.2 最终一致性 171

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

9.5 Spring Cloud Streaming简介 173

9.5.1 向应用程序中添加Kafka 174

9.5.2 安装和运行Kafka 175

9.5.3 Kafka配置属性 175

9.5.4 用于写入Kafka的服务 176

9.5.5 Rest API控制器 177

9.5.6 监听Kafka主题 177

9.6 本章小结 181

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

10.1 断路器模式 184

10.2 使用Hystrix library 186

10.3 在应用程序中配置Hystrix 187

10.3.1 Maven依赖关系 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.7 Hystrix Metrics Stream 198

10.8 在项目中实现Hystrix Dashboard 199

10.9 Turbine仪表盘 201

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

10.11 本章小结 206

第11章 测试Spring Boot应用程序 207

11.1 测试驱动开发 207

11.2 单元测试机制 208

11.2.1 单元测试的优点 211

11.2.2 单元测试的缺点 212

11.2.3 其他模拟库 212

11.3 集成测试 212

11.3.1 Spring测试的优点 214

11.3.2 激活测试类的配置 214

11.4 Spring Boot应用程序的JUnit测试 214

11.5 使用Mockito模拟服务 216

11.6 测试RESTful服务契约的Postman 217

11.7 本章小结 220

第12章 微服务的容器化 221

12.1 微服务架构的容器 222

12.1.1 虚拟机和容器 222

12.1.2 容器方案的优点 224

12.1.3 面向容器方案的缺点 224

12.2 Docker简介 225

12.2.1 安装Docker 226

12.2.2 在Linux上安装Docker 226

12.2.3 在Windows中安装Docker 227

12.2.4 Docker架构 229

12.2.5 Docker引擎 231

12.2.6 Docker容器 232

12.2.7 编写Dockerfile 233

12.3 Docker化Spring Boot应用程序 235

12.4 利用Maven创建Docker镜像 239

12.5 Docker Compose简介 240

12.5.1 安装Docker Compose 241

12.5.2 使用Docker Compose 242

12.5.3 编写docker-compose文件 242

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

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

12.6 Kubernetes简介 248

12.7 本章小结 249

第13章 API管理器 251

13.1 API管理 251

13.1.1 API管理软件的优点 252

13.1.2 API管理工具 252

13.2 速率限制 252

13.3 KONG简介 253

13.3.1 基于KONG架构的微服务REST API 254

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

13.3.3 安装KONG 255

13.3.4 使用KONG API 257

13.4 Swagger 265

13.4.1 Swagger应用 265

13.4.2 在微服务中使用Swagger 266

13.4.3 Swagger的优点 277

13.5 本章小结 278

第14章 云部署(AWS) 279

14.1 AWS EC2实例 279

14.2 AWS上的微服务架构 284

14.3 在AWS EC2上安装Docker 289

14.4 在AWS EC2上运行微服务 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