走上微服务之路——第 3 部分

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

在本系列的 第一篇文章 中,我创建了一个基于 Spring Boot + Data JPA 堆栈的简单微服务,以 JSON 格式显示可用产品列表。在 第二部分 中,我演示了如何将此应用程序上传到 Pivotal Cloud Foundry。在本文中,我将演示在 Heroku 上部署所需的更改。

英雄库

至于 PCF,Heroku 需要一个本地专用应用程序。对于 Heroku,它称为 Toolbelt。安装后,需要通过工具带登录自己的帐户:


 heroku login

下一步是在 Heroku 上创建应用程序。 Cloud Foundry 和 Heroku 之间的主要区别在于,前者部署现成的二进制文件,而 Heroku 从源代码构建它们。创建 Heroku 应用程序还将创建一个要推送到的远程 Git 存储库,因为 Heroku 使用 Git 来管理代码。


 heroku login

 heroku login

heroku create 命令还通过添加新的 heroku remote 来更新 .git 配置。让我们推送到远程存储库:


 heroku login

此时,需要告诉 Heroku 如何启动新建的应用程序。这是通过位于项目根目录的 Procfile 完成的。它应该包含对 Heroku 的提示,表明我们正在使用 Web 应用程序——可通过 http(s) 和标准 Java 命令行访问。此外,Web 端口应绑定一个 Heroku 记录的环境变量:


 heroku login

该应用程序尚未运行,因为日志会告诉您。要显示远程日志,请键入:


 heroku login

应该有这样的东西:


 heroku login

这暗示需要一个 web 节点,或者用 Heroku 的说法,一个 dyno。让我们开始一个:


 heroku login

该应用程序现在应该可以在 https://salty-harbor-2168.herokuapp.com/products 上运行(您应该耐心等待,因为它是一个免费计划,该应用程序可能正在休眠)。然而,仍然缺少一些东西:它仍然在嵌入式 H2 数据库上运行。我们应该切换到更具弹性的数据库。默认情况下,Heroku 免费提供 PostgreSQL 开发数据库。可以通过用户界面或命令行创建这样的数据库。

Spring Boot 文档描述了 Spring Cloud 连接器 库。它能够自动检测应用程序是否在 Heroku 上运行,并创建绑定到 Heroku 提供的 Postgres 数据库的数据源。然而,尽管我尽了最大的努力,我还是没能完成这项工作,每次都会遇到以下问题:


 heroku login

是时候发挥一点创意了。让我们显式地配置它,而不是嗅探数据库及其配置。这需要为 Heroku 创建一个专用的配置文件配置属性文件 src/main/resources/application-heroku.yml


 heroku login

您可以在 Heroku 用户界面中找到确切的数据库连接设置。请注意方言似乎是必需的。此外,应该更新 POM 以将 Postgres 驱动程序添加到依赖项中。

最后,要激活 Heroku 上的配置文件,请将 Procfile 更改为:


 heroku login

再次提交并推送到 Heroku,应更新应用程序以使用提供的 Postgres。

下周,我将创建一个新的购物袋微服务,它依赖于这个微服务并针对失败进行设计。