」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Koyeb 上部署 Spring Boot 應用程式

在 Koyeb 上部署 Spring Boot 應用程式

發佈於2024-11-08
瀏覽:189

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]刪除
最新教學 更多>
  • 哪種在JavaScript中聲明多個變量的方法更可維護?
    哪種在JavaScript中聲明多個變量的方法更可維護?
    在JavaScript中聲明多個變量:探索兩個方法在JavaScript中,開發人員經常遇到需要聲明多個變量的需要。對此的兩種常見方法是:在單獨的行上聲明每個變量: 當涉及性能時,這兩種方法本質上都是等效的。但是,可維護性可能會有所不同。 第一個方法被認為更易於維護。每個聲明都是其自己的語句,使...
    程式設計 發佈於2025-05-02
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月份)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP...
    程式設計 發佈於2025-05-02
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-05-02
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-05-02
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-05-02
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-05-02
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-05-02
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-05-02
  • 在GO中構造SQL查詢時,如何安全地加入文本和值?
    在GO中構造SQL查詢時,如何安全地加入文本和值?
    在go中構造文本sql查詢時,在go sql queries 中,在使用conting and contement和contement consem per時,尤其是在使用integer per當per當per時,per per per當per. [&​​&&&&&&&&&&&&&&&默元組方法在...
    程式設計 發佈於2025-05-02
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    在Java 中,以全屏幕獨立模式運行Java應用程序時,通常無法按期望的工作可能無法使用JAVA應用程序時,將用戶輸入在Java ProblemPassive rendering mode allows the use of KeyListener and ActionListener inter...
    程式設計 發佈於2025-05-02
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-05-02
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-05-02
  • 在Java中如何為PNG文件添加坐標軸和標籤?
    在Java中如何為PNG文件添加坐標軸和標籤?
    如何用java 在現有png映像中添加軸和標籤的axes和labels如何註釋png文件可能具有挑戰性。與其嘗試可能導致錯誤和不一致的修改,不如建議在圖表創建過程中集成註釋。 使用JFReechArt import java.awt.color; 導入java.awt.eventqueue; 導...
    程式設計 發佈於2025-05-02
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中3個Party Package將另一個PAXPANCE帶有導入式套件之間的另一個軟件包,並在導入式套件之間導入另一個軟件包。如迴聲消息所證明的那樣: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    程式設計 發佈於2025-05-02
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-05-02

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3