Spring 实战(第五版)
  • Spring 实战(第 5 版)
  • 第一部分 Spring 基础
  • 第 1 章 Spring 入门
    • 1.1 什么是 Spring?
    • 1.2 初始化 Spring 应用程序
      • 1.2.1 使用 Spring Tool Suite 初始化 Spring 项目
      • 1.2.2 检查 Spring 项目结构
    • 1.3 编写 Spring 应用程序
      • 1.3.1 处理 web 请求
      • 1.3.2 定义视图
      • 1.3.3 测试控制器
      • 1.3.4 构建并运行应用程序
      • 1.3.5 了解 Spring Boot DevTools
      • 1.3.6 回顾
    • 1.4 俯瞰 Spring 风景线
      • 1.4.1 Spring 核心框架
      • 1.4.2 Spring Boot
      • 1.4.3 Spring Data
      • 1.4.4 Spring Security
      • 1.4.5 Spring Integration 和 Spring Batch
      • 1.4.6 Spring Cloud
    • 1.5 小结
  • 第 2 章 开发 Web 应用程序
    • 2.1 展示信息
      • 2.1.1 建立域
      • 2.1.2 创建控制器类
      • 2.1.3 设计视图
    • 2.2 处理表单提交
    • 2.3 验证表单输入
      • 2.3.1 声明验证规则
      • 2.3.2 在表单绑定时执行验证
      • 2.3.3 显示验证错误
    • 2.4 使用视图控制器
    • 2.5 选择视图模板库
      • 2.5.1 缓存模板
    • 2.6 小结
  • 第 3 章 处理数据
    • 3.1 使用 JDBC 读写数据
      • 3.1.1 为域适配持久化
      • 3.1.2 使用 JdbcTemplate
      • 3.1.3 定义模式并预加载数据
      • 3.1.4 插入数据
    • 3.2 使用 Spring Data JPA 持久化数据
      • 3.2.1 添加 Spring Data JPA 到数据库中
      • 3.2.2 注解域作为实体
      • 3.2.3 声明 JPA repository
      • 3.2.4 自定义 JPA repository
    • 3.3 小结
  • 第 4 章 Spring 安全
    • 4.1 启用 Spring Security
    • 4.2 配置 Spring Security
      • 4.2.1 内存用户存储
      • 4.2.2 基于 JDBC 的用户存储
      • 4.2.3 LDAP 支持的用户存储
      • 4.2.4 自定义用户身份验证
    • 4.3 保护 web 请求
      • 4.3.1 保护请求
      • 4.3.2 创建用户登录页面
      • 4.3.3 登出
      • 4.3.4 阻止跨站请求伪造攻击
    • 4.4 了解你的用户
    • 4.5 小结
  • 第 5 章 使用配置属性
    • 5.1 微调自动配置
      • 5.1.1 理解 Spring 环境抽象
      • 5.1.2 配置数据源
      • 5.1.3 配置嵌入式服务器
      • 5.1.4 配置日志
      • 5.1.5 使用特殊的属性值
    • 5.2 创建自己的配置属性
      • 5.2.1 定义配置属性持有者
      • 5.2.2 声明配置属性元数据
    • 5.3 使用 profile 文件进行配置
      • 5.3.1 定义特定 profile 的属性
      • 5.3.2 激活 profile 文件
      • 5.3.3 有条件地使用 profile 文件创建 bean
    • 5.4 小结
  • 第二部分 集成 Spring
  • 第 6 章 创建 REST 服务
    • 6.1 编写 RESTful 控制器
      • 6.1.1 从服务器获取数据
      • 6.1.2 向服务器发送数据
      • 6.1.3 更新服务器上的资源
      • 6.1.4 从服务器删除数据
    • 6.2 启用超媒体
      • 6.2.1 添加超链接
      • 6.2.2 创建资源装配器
      • 6.2.3 嵌套命名关系
    • 6.3 启用以数据为中心的服务
      • 6.3.1 调整资源路径和关系名称
      • 6.3.2 分页和排序
      • 6.3.3 添加用户端点
      • 6.3.4 向 Spring Data 端点添加用户超链接
    • 6.4 小结
  • 第 7 章 调用 REST 服务
    • 7.1 使用 RestTemplate 调用 REST 端点
      • 7.1.1 请求 GET 资源
      • 7.1.2 请求 PUT 资源
      • 7.1.3 请求 DELETE 资源
      • 7.1.4 请求 POST 资源
    • 7.2 使用 Traverson 引导 REST API
    • 7.3 小结
  • 第 8 章 发送异步消息
    • 8.1 使用 JMS 发送消息
      • 8.1.3 接收 JMS 消息
      • 8.1.2 使用 JmsTemplate 发送消息
      • 8.1.1 设置 JMS
    • 8.2 使用 RabbitMQ 和 AMQP
      • 8.2.1 添加 RabbitMQ 到 Spring 中
      • 8.2.2 使用 RabbitTemplate 发送消息
      • 8.2.3 从 RabbitMQ 接收消息
    • 8.3 使用 Kafka 发送消息
      • 8.3.1 在 Spring 中设置 Kafka
      • 8.3.2 使用 KafkaTemplate 发送消息
      • 8.3.3 编写 Kafka 监听器
    • 8.4 小结
  • 第 9 章 集成 Spring
    • 9.1 声明简单的集成流
      • 9.1.1 使用 XML 定义集成流
      • 9.1.2 在 Java 中配置集成流
      • 9.1.3 使用 Spring Integration 的 DSL 配置
    • 9.2 探索 Spring Integration
      • 9.2.1 消息通道
      • 9.2.2 过滤器
      • 9.2.3 转换器
      • 9.2.4 路由
      • 9.2.5 分割器
      • 9.2.6 服务激活器
      • 9.2.7 网关
      • 9.2.8 通道适配器
      • 9.2.9 端点模块
    • 9.3 创建 Email 集成流
    • 9.4 总结
  • 第三部分 响应式 Spring
  • 第 10 章 Reactor 介绍
    • 10.1 理解响应式编程
      • 10.1.1 定义响应式流
    • 10.2 Reactor
      • 10.2.1 图解响应式流
      • 10.2.2 添加 Reactor 依赖
    • 10.3 通用响应式操作实战
      • 10.3.1 创建响应式类型
      • 10.3.2 响应式类型结合
      • 10.3.3 转换和过滤响应式流
      • 10.3.4 对反应类型执行逻辑操作
    • 10.4 总结
  • 第 11 章 开发响应式 API
    • 11.1 使用 Spring WebFlux
      • 11.1.1 Spring WebFlux 介绍
      • 11.1.2 编写响应式 Controller
    • 11.2 定义函数式请求处理程序
    • 11.3 测试响应式 Controller
      • 11.3.1 测试 GET 请求
      • 11.3.2 测试 POST 请求
      • 11.3.3 使用线上服务器进行测试
    • 11.4 响应式消费 REST API
      • 11.4.1 通过 GET 方式获取资源
      • 11.4.2 通过 POST 方式发送资源
      • 11.4.3 删除资源
      • 11.4.4 处理请求错误
      • 11.4.5 请求转换
    • 11.5 保护响应式 web API
      • 11.5.1 配置响应式 Web 安全
      • 11.5.2 配置响应式用户信息服务
    • 11.6 总结
  • 第 12 章 响应式持久化数据
    • 12.1 理解 Spring Data 响应式历程
      • 12.1.1 Spring Data 响应式精髓
      • 12.1.2 在响应式与非响应式之间进行转换
      • 12.1.3 开发响应式库
    • 12.2 使用响应式 Cassandra 库
      • 12.2.1 开启 Spring Data Cassandra
      • 12.2.2 理解 Cassandra 数据模型
      • 12.2.3 Cassandra 持久化实体映射
      • 12.2.4 编写响应式 Cassandra 库
    • 12.3 编写响应式 MongoDB 库
      • 12.3.1 开启Spring Data MongonDB
      • 12.3.2 MongoDB 持久化实体映射
      • 12.3.3 编写响应式 MongoDB 库
    • 12.4 总结
  • 第四部分 云原生 Spring
  • 第 13 章 服务发现
    • 13.1深入思考微服务
    • 13.2 配置服务注册
      • 13.2.1 配置 Eureka
      • 13.2.2 扩展 Eureka
    • 13.3 注册并发现服务
      • 13.3.1 配置 Eureka 客户端属性
      • 13.3.2 消费服务
    • 13.4 总结
  • 第 14 章 配置管理
    • 14.1 共享配置
    • 14.2 运行配置服务器
      • 14.2.1 启动配置服务器
      • 14.2.2 填写配置库
    • 14.3 消费共享的配置
    • 14.4 服务应用程序和特定配置文件的属性
      • 14.4.1 服务特定应用程序的属性
      • 14.4.2 服务配置文件属性
    • 14.5 为配置的属性加密
      • 14.5.1 在 Git 中加密属性
      • 14.5.2 在 Vault 中存储密码
    • 14.6 远程刷新配置属性
      • 14.6.1 手动刷新配置属性
      • 14.6.2 自动刷新配置属性
    • 14.7 总结
  • 第 15 章 处理失败和时延
    • 15.1 了解断路器
    • 15.2 定义断路器
      • 15.2.1 缓解时延
      • 15.2.2 管理断路器阈值
    • 15.3 管理失败事件
      • 15.3.1 介绍 Hystrix 面板
      • 15.3.2 了解 Hystrix 线程池
    • 15.4 聚合多个 Hystrix 流
    • 15.5 总结
  • 第五部分 部署Spring
  • 第 16 章 使用 SpringBoot Actuator
    • 16.1 介绍 Actuator
      • 16.1.1 配置 Actuator 基本路径
      • 16.1.2 启用和禁用 Actuator 端点
    • 16.2 使用 Actuator 端点
      • 16.2.1 获取重要的应用程序信息
      • 16.2.2 查看配置详细信息
      • 16.2.3 查看应用程序活动
      • 16.2.4 利用运行时指标
    • 16.3 自定义 Actuator
      • 16.3.1 向 /info 端点提供信息
      • 16.3.2 自定义健康指标
      • 16.3.3 注册自定义指标
      • 16.3.4 创建自定义端点
    • 16.4 保护 Actuator
    • 16.5 总结
  • 第 17 章 管理 Spring
    • 17.1 使用 SpringBoot Admin
      • 17.1.1 创建 Admin 服务端
      • 17.1.2 注册 Admin 客户端
    • 17.2 深入 Admin 服务端
      • 17.2.1 查看普通应用程序运行状况和信息
      • 17.2.2 观察关键指标
      • 17.2.3 检查环境属性
      • 17.2.4 查看并设置 log 级别
      • 17.2.5 监控线程
      • 17.2.6 追踪 HTTP 请求
    • 17.3 保护 Admin 服务端
      • 17.3.1 在 Admin 服务端中启用登录
      • 17.3.2 使用 Actuator 进行认证
    • 17.4 总结
  • 第 18 章 使用 JMX 监控 Spring
    • 18.1 使用 Actuator MBean
    • 18.2 创建自己的 MBean
    • 18.3 发送通知
    • 18.4 总结
  • 第 19 章 部署 Spring
    • 19.1 权衡部署选项
    • 19.2 构建并部署 WAR 文件
    • 19.3 将 JAR 文件推送到 Cloud Foundry
    • 19.4 在 Docker 容器中运行 SpringBoot
    • 19.5 终章
    • 19.6 总结
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 第 19 章 部署 Spring

19.3 将 JAR 文件推送到 Cloud Foundry

上一页19.2 构建并部署 WAR 文件下一页19.4 在 Docker 容器中运行 SpringBoot

最后更新于3年前

这有帮助吗?

服务器硬件的购买和维护成本可能很高。对于某些组织来说,增加服务器以支撑更大的访问量,可能很棘手,甚至令人望而却步。如今,将应用程序部署到云端,是一个吸引人且性价比很高的选择。

有很多云服务商可以选择,那些提供平台即服务(PaaS)的最引人注目。PaaS 提供了一个现成的应用程序部署平台,还具有多个附加服务(如数据库和消息代理)。此外,当您的应用程序需要承担更多访问量的时候,云平台使您可以轻松地,通过添加和删除实例扩缩服务规模。

Cloud Foundry 是一个开源 PaaS 平台,起源于 Pivotal 公司。该公司同时也赞助了 Spring 框架和 Spring 平台的其他开源库。Cloud Foundry 最引人注目的一点是,提供开源和商业发行版,让您可以选择如何,以及在何处使用 Cloud Foundry。它甚至可以运行在公司的防火墙内的数据中心上,以提供私有云服务。

尽管 Cloud Foundry 很乐意接受 WAR 文件,但 WAR 文件格式对于 Cloud Foundry 而言,是一种过时的格式。更简单的可执行 JAR 文件,更适合部署到 Cloud Foundry。

为了演示如何在 Cloud Foundry 中构建和部署可执行 JAR 文件,您将构建配料服务应用程序,并将其部署到 Pivotal Web Service(PWS),这是由 Pivotal 公司 提供的 Cloud Foundry 服务。如果使用 PWS 的服务,需要注册一个帐户。PWS 提供了价值 87 美元的免费试用信用卡,试用期间甚至不要求您提供任何信用卡信息。

注册 PWS 账号后,您需要下载并安装 cf 命令行工具 。您将使用 cf 工具,把应用程序推送到 Cloud Foundry。第一步是登录您的 PWS 帐户:

$ cf login -a https://api.run.pivotal.io
API endpoint: https://api.run.pivotal.io

Email> {your email}

Password> {your password}

Authenticating...
OK

很好!您现在可以将配料服务推送到云端了!事实证明,该项目已准备好部署到 Cloud Foundry 了。所需要做的就是构建它,然后把它推到云端。

要使用 Maven 构建项目,可以使用 Maven 包装器执行构建任务(您将在 target 目录中找到 JAR 文件):

$ mvnw package

使用 Gradle,您可以使用 Gradle 包装器来执行构建任务(您将发现生成的 JAR 文件位于 build/libs 目录中):

$ gradlew build

现在只剩下使用 cf 命令将 JAR 文件推送到 Cloud Foundry 了:

$ cf push ingredient-service -p target/ingredient-service-0.0.19-SNAPSHOT.jar

因为想一个唯一的名称可能很棘手,cf push 命令提供了一个随机取名选项,可为您随机生成子域名。下面展示了如何推送配料服务应用程序,并随机生成子域名:

$ cf push ingredient-service \
    -p target/ingredient-service-0.0.19-SNAPSHOT.jar \
    --random-route

使用 --random-route 时,仍然需要应用程序名,但两个随机选定的单词将作为名称,用于生成子域名。

如前所述,应用程序将继续使用嵌入式 Mongo 数据库(仅用于测试目的)保存配料数据。您可能希望在生产中使用真实的数据库。在我写这篇文章的时候,有一个 PWS 中名为 mlab 的托管 MongoDB 服务可用。使用 cf marketplace 命令,您可以找到这个服务(以及任何其他可用服务)。创建 mlab 服务的实例,使用 cf create service 命令:

$ cf create-service mlab sandbox ingredientdb

这将创建一个名为 ingredientdb 的沙箱服务。一旦服务创建后,您可以使用 cf bind 将其绑定到应用程序上。例如,将 ingredientdb 服务绑定到配料服务上,请使用以下命令:

$ cf bind-service ingredient-service ingredientdb

将服务绑定到应用程序上,仅为应用程序提供了有关服务的基本信息,以便使用名为 VCAP_SERVICES 的环境变量连接服务。它不会以任何方式更改应用程序,以使用该服务。一旦服务绑定成功,您需要重新启动应用程序以使绑定生效:

$ cf restage ingredient-service

cf restage 命令强制 Cloud Foundry 重新部署应用程序,并重新获取 VCAP_SERVICES 的值。当这样做时,它将看到有一个 MongoDB 服务绑定到了应用程序上,并使用该服务。

Cloud Foundry 是部署 Spring Boot 应用程序的优秀平台。它使 Spring 多个项目之间有一定的协同作用。另一个在云端部署应用程序的常用方法,是推送到基础设施即服务(IAAS)平台,如 AWS,这会将应用程序打包发布到云端 Docker 容器中。让我们看看如何创建一个承载 Spring Boot 应用程序的 Docker 容器。

cf push 的第一个参数是 Cloud Foundry 中应用程序的名称。现在,应用程序的完整 URL 将是 。除此之外,此名称将用作,应用程序所在的子域名。因此,为应用程序指定的名称必须唯一,这一点很重要。它不能与部署在 Cloud Foundry 中的任何其他应用程序(包括由其他 Cloud Foundry 用户部署的)产生冲突。

假设一切顺利,应用程序应该部署并准备就绪了。假设子域是 ingredient-service,您可以用浏览器访问 ,您应该会收到一份可用配料的清单。

PWS 中有许多可用的服务,包括 MySQL 数据库、PostgreSQL 数据库,甚至可以随时使用 Eureka 和 Config Server 服务。我鼓励您了解更多关于 PWS 提供的服务 ,并熟悉如何使用 PWS 。

http://run.pivotal.io
https://console.run.pivotal.io/tools
http://ingredient-service.cfapps.io
http://ingredient-service.cfapps.io/ingredients
https://console.run.pivotal.io/marketplace
https://docs.run.pivotal.io/