内容推荐 本书详细阐述了与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)、生产服务监视和最佳实践等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。 目录 第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 响应式 序言 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/以了解丰富的 代码和视频资源。本书约定本书通过不同的文本风格区 分相应的信息类型。下面通过一些示例对此类风格以及 具体含义的解释予以展示。代码块如下所示: @RestControllerclass HelloController { @GetMapping("/") String hello() { "Hello World!!!" }} 当某个代码块希望引起读者的足够重视时,一般会 采用黑体表示,如下所示: (dependencies) (dependency) (groupId)org.springframework.boot(/groupId) (artifactId)spring-boot-starter- web(/artifactId) (/dependency)(/dependencies) 命令行输入或输出则采用下列方式表达: $ Spring run HelloController.groovy 图标表示较为重要的说明事项。 图标表示提示信 息和操作技巧。读者反馈和客户支持欢迎读者对本书的 建议或意见予以反馈。对此,读者可向 feedback@packtpub.com发送邮件,并以书名作为邮件 标题。若读者对本书有任何疑问,均可发送邮件至 questions@packtpub.com,我们将竭诚为您服务。若 读者针对某项技术具有专家级的见解,抑或计划撰写书 籍或完善某部著作的出版工作,则可访问 www.packtpub.com/authors。勘误表尽管我们在最大 程度上做到尽善尽美,但错误依然在所难免。如果读者 发现谬误之处,无论是文字错误抑或是代码错误,还望 不吝赐教。对此,读者可访问http://www. packtpub.com/submit-errata,选取对应书籍,单击 Errata Submission Form超链接,并输入相关问题的 详细内容。版权须知一直以来,互联网上的版权问题从 未间断,Packt出版社对此类问题异常重视。若读者在 互联网上发现本书任意形式的副本,请告知网络地址或 网站名称,我们将对此予以处理。关于盗版问题,读者 可发送邮件至copyright@packtpub.com。问题解答若 读者对本书有任何疑问,均可发送邮件至 questions@packtpub.com,我们将竭诚为您服务。
导语 本书适用于各种层次的Java开发人员,他们希望学习Spring Boot 和Spring Cloud并将其作为基于企业分布式云的应用程序。因此,当采用基于Spring Boot 2.0和Spring Cloud的微服务架构时,本书对企业级Java和Spring开发人员来说十分有用,进而帮助他们深入理解本地云设计模式,以及微服务体系结构如何解决分布式应用程序中本地云基础设施中的常见设计问题,并可将本书中的示例结合自己的项目加以使用。 |