知識庫 / Spring / Spring Cloud RSS 訂閱

Spring Cloud – 通過 Profiles 禁用發現客户端

Spring Cloud
HongKong
8
12:16 PM · Dec 06 ,2025

1. 概述

在本教程中,我們將探討如何使用 profiles 禁用 Spring Cloud 的 Discovery 客户端。這在我們需要在不修改代碼的情況下啓用/禁用服務發現時非常有用。

2. 設置 Eureka 服務器和 Eureka 客户端

讓我們首先創建一個 Eureka 服務器和一個 Discovery 客户端。

首先,我們可以按照《Spring Cloud Netflix Eureka 教程》第 2 節的方法設置我們的 Eureka 服務器。 務必確保 Eureka 服務器已設置並正在運行。未能啓動 Eureka 服務器會導致以下步驟無法正常工作。

2.1. Discovery Client 設置

接下來,我們需要創建一個應用程序,使其在服務器上進行註冊。我們將其設置為 Discovery Client。

請將 WebEureka Client starter 依賴項添加到我們的 pom.xml 文件中:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

我們還需要確保我們的雲啓動器在依賴管理部分存在,並且 Spring Cloud 版本已設置。

使用 Spring Initializr 創建項目時,這些都會自動設置。如果未設置,我們可以將它們添加到我們的 pom.xml 文件中:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>${spring-cloud-dependencies.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<properties>
    <spring-cloud-dependencies.version>2021.0.3</spring-cloud-dependencies.version>
</properties>

2.2. 添加配置屬性

一旦依賴項已就位,我們只需要將新客户端應用程序的配置屬性添加到 application.properties 文件中:

eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:8761/eureka}
eureka.instance.preferIpAddress=false
spring.application.name=spring-cloud-eureka-client

這將確保在應用程序啓動時,它會向 Eureka 服務器註冊,該服務器的 URL 位於上述指定位置。 它將被命名為 spring-cloud-eureka-client

請注意,通常我們也會在配置類上使用 @EnableDiscoveryClient 註解來啓用 Discovery 客户端。 但是,如果使用 Spring Cloud 啓動器,則不需要該註解。 Discovery 客户端默認已啓用。 此外,當它在類路徑上找到 Netflix Eureka 客户端時,會自動配置它。

2.3. Hello World 控制器

為了測試我們的應用程序,我們需要一個可以訪問的示例 URL。讓我們創建一個簡單的控制器,它將返回一個問候消息:

@RestController
public class HelloWorldController {

    @RequestMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}

現在,是時候運行 Eureka 服務器和 Discovery 客户端。當我們運行應用程序時,Discovery 客户端將與 Eureka 服務器註冊。我們可以在 Eureka 服務器儀表盤上看到相同的內容:

3. 基於角色的配置

在某些情況下,我們可能需要禁用服務註冊。一個原因可能是環境。

例如,我們可能需要在本地開發環境中禁用 Discovery 客户端,因為每次想要本地測試時運行 Eureka 服務器是不必要的。 讓我們看看如何實現這一點。

我們將通過在 application.properties文件中修改屬性來啓用和禁用 Discovery 客户端,按不同配置文件進行設置。

3.1. 使用單獨的屬性文件

一種簡單且流行的做法是使用每個環境單獨的屬性文件。

例如,讓我們創建一個名為 application-dev.properties 的屬性文件:

spring.cloud.discovery.enabled=false

我們可以使用 spring.cloud.discovery.enabled 屬性啓用/禁用 Discovery 客户端。 我們將其設置為 false 以禁用 Discovery 客户端。

dev 配置文件處於活動狀態時,此文件將代替原始的屬性文件使用。

3.2. 使用多文檔文件

如果不想為每個環境使用單獨的文件,另一種選擇是使用多文檔屬性文件。

我們將添加兩個屬性來實現這一點:

#---
spring.config.activate.on-profile=dev
spring.cloud.discovery.enabled=false

對於這種技術,我們使用 ‘#—’ 將我們的屬性文件分成兩部分。 此外,我們還將使用 spring.config.activate.on-profile 屬性。 這兩行在聯合使用時,指示應用程序僅在激活配置文件時讀取當前部分的屬性。 在我們的例子中,我們將使用 dev 配置文件。

同樣,如之前所述,我們已將 spring.cloud.discovery.enabled 屬性設置為 false.

這將禁用 dev 配置文件中的 Discovery 客户端,但在未激活配置文件時保持啓用。

4. 測試

現在,是時候運行 Eureka 服務器和 Discovery 客户端,並測試一切是否按預期工作。我們尚未添加了配置文件。當運行應用程序時,Discovery 客户端將與 Eureka 服務器註冊。您可以在 Eureka 服務器儀表板上看到相同的內容:

4.1. 使用配置文件進行測試

接下來,我們在運行應用程序時添加配置文件。可以通過添加命令行參數 -Dspring.profiles.active=dev 來啓用 dev 配置文件。當我們運行應用程序時,我們可以看到客户端這次並未與 Eureka Server 註冊:<img src="/file/story/attachments/image/l/12df0a2c-8840-40b5-bbfd-13e838342eaa>

5. 結論

在本教程中,我們學習瞭如何使用屬性來基於配置文件添加配置。我們使用相同的機制來根據活動配置文件禁用發現客户端。

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

發佈 評論

Some HTML is okay.