”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在 Koyeb 上部署 Spring Boot 应用程序

在 Koyeb 上部署 Spring Boot 应用程序

发布于2024-11-08
浏览:984

Deploying Spring Boot Applications on Koyeb

介绍

当我们作为开发人员开始构建东西时,我们的主要目标之一就是与他人分享我们所创建的内容。对于前端开发人员来说,这通常很简单,这要归功于 Vercel 和 Netlify 等出色的托管服务,它们无缝支持前端应用程序。然而,对于后端开发人员来说,展示我们的工作可能更具挑战性。我们构建 API,使用数据库,虽然 JSON 可能很强大,但它在视觉上不如使用 CSS 或 Lottie 构建的动画那么引人注目。

这就是为什么找到一种高效可靠的方式来部署后端应用程序至关重要。 Spring Boot 是一种流行的基于 Java 的框架,它简化了构建生产就绪应用程序的过程,但部署它们仍然是一个挑战。这就是 Koyeb 的用武之地。Koyeb 提供了一个强大且易于使用的平台,允许开发人员以最少的设置快速部署他们的 Spring Boot 应用程序。在本指南中,我们将引导您完成在 Koyeb 上部署带有 PostgreSQL 数据库的 Spring Boot 应用程序的整个过程,从开始到结束。


1. 前提条件

在我们深入部署过程之前,请确保您具备以下条件:

  • 一个基本的 Spring Boot 应用程序。 如果您没有,您可以使用 Spring Initializr 快速生成一个具有以下依赖项的项目:
    • Spring Web
    • Spring Data JPA
    • PostgreSQL 驱动程序
  • GitHub(或 GitLab/Bitbucket)存储库,托管 Spring Boot 项目的位置。
  • Neon 帐户。 在 Neon 注册
  • 一个 Koyeb 帐户。 如果您没有 Koyeb 的网站,请注册。
  • 已安装 Maven 或 Gradle,具体取决于您的 Spring Boot 项目的配置方式。

2. 设置数据库

  • 在 Koyeb 上,实例化一个免费 PostgreSQL 数据库,它将提供数据库 URL 但每月仅限 50 小时。

-在 Neon 上,实例化一个 免费 PostgreSQL 数据库,该数据库还将提供数据库 URL。


3.使用Spring boot连接数据库

在资源目录中,您将创建一个名为 env.properties 的文件,其中存储所有环境变量,在本例中为 DB_URL、DB_USERNAME 和 DB_PASSWORD。

永远不要提交这个文件到你的github的存储库。

env.properties 文件:

DB_USERNAME=
DB_PASSWORD=
DB_URL=

您的application.properties文件:

application.properties文件:

server.port=${PORT:8080}

spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

spring.jpa.hibernate.ddl-auto=update

spring.config.import=classpath:env.properties

解释

  • server.port - 这是您的应用程序将运行的端口。我们设置了一个环境变量 PORT,如果 PORT 为空,则回退为 8080。
  • spring.datasource.url - 这是来自 Neon 或 Koyeb 仪表板的环境变量。
  • spring.datasource.username - 这是来自 Neon 或 Koyeb 仪表板的环境变量。
  • spring.datasource.password - 这是来自 Neon 或 Koyeb 仪表板的环境变量。
  • spring.config.import - 这将导入您存储敏感数据的文件。

4.创建system.properties文件

在项目的根目录下,创建一个system.properties文件。

此文件指定要使用的 Java 运行时版本,以便 Koyeb Java 构建包使用正确的版本执行项目。

记住:Koyeb 接受主要版本值 1.8、11、13、15、17、19 和 20。

如果不指定Java版本,版本1.8将被使用。

我正在使用Java 21。如果您使用的是其他版本,请相应更改。

系统属性

java.runtime.version=21

5. 创建控制器

此控制器将在 / 路由处显示 Hello World 消息。

package com.example.demo.Modules.User.controller;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;

@RestController
public class UserController {

    @GetMapping("/")
    public String helloWorld() {
        return "Hello World";
    }

}

6.将代码推送到Github

在 Github 上创建公共存储库并推送您的代码。获取此存储库的 URL


7. 在 Koyeb 上部署

  • 输入您的 koyeb 帐户。
  • 转到服务 > Web 服务 > 使用 Github 创建 Web 服务。
  • 连接到 Github 或粘贴公共存储库 URL。
  • 等待项目构建。
  • 如果成功,将生成一个公共URL,每个人都可以访问您的Spring Boot应用程序。

结论

就是这样!您已经创建了一个 Spring Boot 应用程序,将其与云数据库连接,并将所有内容部署在 Koyeb 上。这可以是您想要在作品集中展示的项目的开始,让客户看到您可以做什么。

您可以使用图像上传器文章来增加此应用程序。

感谢您的阅读!


?参考

  • Koyeb - Spring Boot 部署
  • Koyeb - Java 参考

?跟我说话

  • 领英
  • Github
  • 文件夹
版本声明 本文转载于:https://dev.to/mspilari/deploying-spring-boot-applications-on-koyeb-44kj?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-04-06
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-04-06
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-04-06
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-04-06
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。 映射{} 因此。我们不使用jQuery的“ .aimimate(...
    编程 发布于2025-04-06
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 的 ...
    编程 发布于2025-04-06
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-04-06
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-04-06
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-06
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,以便更快地搜索这些前缀。理解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-04-06
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-06
  • 如何使用node-mysql在单个查询中执行多个SQL语句?
    如何使用node-mysql在单个查询中执行多个SQL语句?
    在node-mysql node-mysql文档最初出于安全原因最初禁用多个语句支持,因为它可能导致SQL注入攻击。要启用此功能,您需要在创建连接时将倍增设置设置为true: var connection = mysql.createconnection({{multipleStatement:...
    编程 发布于2025-04-06
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-06
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-06
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, attributeError:SomeClass实...
    编程 发布于2025-04-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3