1. 概述
在本教程中,我們將探討如何使用 profiles 禁用 Spring Cloud 的 Discovery 客户端。這在我們需要在不修改代碼的情況下啓用/禁用服務發現時非常有用。
2. 設置 Eureka 服務器和 Eureka 客户端
讓我們首先創建一個 Eureka 服務器和一個 Discovery 客户端。
首先,我們可以按照《Spring Cloud Netflix Eureka 教程》第 2 節的方法設置我們的 Eureka 服務器。 務必確保 Eureka 服務器已設置並正在運行。未能啓動 Eureka 服務器會導致以下步驟無法正常工作。
2.1. Discovery Client 設置
接下來,我們需要創建一個應用程序,使其在服務器上進行註冊。我們將其設置為 Discovery Client。
請將 Web 和 Eureka 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. 結論
在本教程中,我們學習瞭如何使用屬性來基於配置文件添加配置。我們使用相同的機制來根據活動配置文件禁用發現客户端。