知識庫 / Spring RSS 訂閱

將 Spring Boot 應用程序部署到 Cloud Foundry

Cloud,Spring
HongKong
4
01:42 PM · Dec 06 ,2025

1. 概述

將 Spring Boot 應用程序部署到 Cloud Foundry 是一項簡單的操作。在本教程中,我們將向您展示如何完成它。

2. Spring Cloud 依賴項

由於該項目需要添加 Spring Cloud 項目的新依賴項,我們將添加 Spring Cloud 依賴項 BOM:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2023.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

我們可以從 Maven Central 找到 spring-cloud-dependencies 庫的最新版本。

現在,我們想要維護一個單獨的構建用於 Cloud Foundry,因此我們將創建一個名為 cloudfoundry 的 profile 在 Maven 的 pom.xml 中。

我們還將添加編譯器排除和 Spring Boot 插件來配置包的名稱:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/logback.xml</exclude>
            </excludes>
        </resource>
    </resources>
    <plugins>
        <plugin>                        
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <finalName>${project.name}-cf</finalName>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/cloud/config/*.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

我們還希望排除雲相關的文件,使其不在常規構建中出現,因此我們在 Maven 編譯插件中添加了一個全局配置文件排除:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/cloud/*.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

然後,我們需要添加 Spring Cloud Starter 和 Spring Cloud Connectors 庫,這些庫提供對 Cloud Foundry 的支持。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cloud-connectors</artifactId>
</dependency>

3. Cloud Foundry 配置

為了完成本教程,您需要註冊試用版 這裏 或下載預配置的開發環境,用於 Native LinuxVirtual Box

此外,Cloud Foundry CLI 必須安裝。 詳細説明請參考 這裏

在與 Cloud Foundry 提供商註冊後,API URL 將會可用(您可以通過左側的 Tools 選項返回)。

應用程序容器允許我們將服務綁定到應用程序。 接下來,讓我們登錄到 Cloud Foundry 環境:

cf login -a <url>

雲 Foundry 市場(Cloud Foundry Marketplace)是一個服務目錄,包括數據庫、消息隊列、電子郵件、監控、日誌記錄以及更多服務。 大多數服務都提供免費或試用計劃。

讓我們在市場(Marketplace)中搜索“MySQL”併為我們的應用程序創建一個服務:

cf marketplace | grep MySQL
>
cleardb     spark, boost*, amp*, shock*         Highly available MySQL for your Apps.

輸出列出了描述中包含“MySQL”的服務。在PCF環境中,“MySQL”服務名為cleardb,非免費計劃標記為星號。

接下來,我們使用以下方法列出服務的詳細信息:

cf marketplace -s cleardb
>
service plan description                                                                 free or paid
spark        Great for getting started and developing your apps                             free
boost        Best for light production or staging your applications                         paid
amp          For apps with moderate data requirements                                       paid
shock        Designed for apps where you need real MySQL reliability, power and throughput  paid

現在我們創建一個名為 spring-bootstrap-db 的免費 MySQL 服務實例:

cf create-service cleardb spark spring-bootstrap-db

4. 應用配置

接下來,我們添加一個帶有 <em @Configuration</em> 註解的類,該類繼承了 <em AbstractCloudConfig</em>,以在名為 <em org.baeldung.cloud.config</em> 的包中創建一個 <em DataSource</em>

@Configuration
@Profile("cloud")
public class CloudDataSourceConfig extends AbstractCloudConfig {
 
    @Bean
    public DataSource dataSource() {
        return connectionFactory().dataSource();
    }
}

添加 @Profile(“cloud”) 可確保雲連接器在本地測試期間不處於活動狀態。我們還為集成測試添加了 @ActiveProfiles(profiles = {“local”})

然後使用以下命令構建應用程序:

mvn clean install spring-boot:repackage -P cloudfoundry

此外,我們需要提供一個 manifest.yml 文件,以將服務綁定到應用程序。

我們通常將 manifest.yml 文件放在項目文件夾中,但在本例中,由於我們將演示部署到多個雲原生提供商,因此我們將創建一個 cloudfoundry 文件夾。

---
applications:
- name: spring-boot-bootstrap
  memory: 768M
  random-route: true
  path: ../target/spring-boot-bootstrap-cf.jar
  env:
    SPRING_PROFILES_ACTIVE: cloud,mysql
  services:
  - spring-bootstrap-db

5. 部署

部署應用程序現在變得像這樣簡單:

cd cloudfoundry
cf push

Cloud Foundry 將使用 Java Buildpack 部署應用程序並創建隨機路由到該應用程序。

我們可以使用以下命令查看日誌文件的最後幾條記錄:

cf logs spring-boot-bootstrap --recent

或者我們可以追蹤日誌文件:

cf logs spring-boot-bootstrap

最後,我們需要路由名稱來測試應用程序:

cf app spring-boot-bootstrap
>
name:              spring-boot-bootstrap
requested state:   started
routes:            spring-boot-bootstrap-delightful-chimpanzee.cfapps.io
last uploaded:     Thu 23 Aug 08:57:20 SAST 2018
stack:             cflinuxfs2
buildpacks:        java-buildpack=v4.15-offline-...

type:           web
instances:      1/1
memory usage:   768M
     state     since                  cpu    memory           disk
#0   running   2018-08-23T06:57:57Z   0.5%   290.9M of 768M   164.7M of 1G

執行以下命令將添加一本書:

curl -i --request POST \
    --header "Content-Type: application/json" \
    --data '{"title": "The Player of Games", "author": "Iain M. Banks"}' \
    https://<app-route>/api/books
#OR
http POST https://<app-route>/api/books title="The Player of Games" author="Iain M. Banks"

這條命令將列出所有書籍:

curl -i https://<app-route>/api/books 
#OR 
http https://<app-route>/api/books
>
HTTP/1.1 200 OK

[
    {
        "author": "Iain M. Banks",
        "id": 1,
        "title": "Player of Games"
    },
    {
        "author": "J.R.R. Tolkien",
        "id": 2,
        "title": "The Hobbit"
    }
]

6. 擴展應用程序

最後,在 Cloud Foundry 上擴展應用程序就像使用 scale 命令一樣簡單:

cf scale spring-cloud-bootstrap-cloudfoundry <options>
Options:
-i <instances>
-m <memory-allocated> # Like 512M or 1G
-k <disk-space-allocated> # Like 1G or 2G
-f # Force restart without prompt

在不再需要該應用程序時,請務必將其刪除:

cf delete spring-cloud-bootstrap-cloudfoundry

7. 結論

本文介紹了使用 Spring Boot 簡化雲原生應用程序開發的 Spring Cloud 庫。使用 Cloud Foundry CLI 進行部署已得到充分文檔記錄在此

Cloud Foundry CLI 的額外插件可在 插件倉庫 中找到。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.