1. 概述

在这个教程中,我们将探讨如何使用配置文件来禁用Spring Cloud的发现客户端。在某些情况下,我们可能希望在不修改代码的情况下启用或禁用服务发现。

2. 设置Eureka服务器和发现客户端

首先,让我们创建一个Eureka服务器和一个发现客户端。

2.1. 发现客户端设置

接下来,我们要创建一个能在服务器上注册的应用。让我们将这个应用设置为发现客户端。

pom.xml中添加Web和Netflix Eureka客户端启动器依赖:

<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

这将确保当应用程序启动时,它会使用上述URL注册到Eureka服务器上,名为spring-cloud-eureka-client

通常,我们会在配置类上使用@EnableDiscoveryClient注解来启用发现客户端。但如果我们使用Spring Cloud启动器,就不需要这个注解,因为默认情况下它们是启用的。此外,当发现类路径上的Netflix Eureka客户端时,它会自动配置。

2.3. 示例控制器

为了测试我们的应用,我们需要一个可以访问的示例URL。让我们创建一个简单的控制器,返回一个问候消息:

@RestController
public class HelloWorldController {

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

现在,运行Eureka服务器和发现客户端。当应用程序运行时,发现客户端将与Eureka服务器注册。在Eureka服务器仪表板上也可以看到:

Eureka服务器仪表板上显示发现客户端实例

3. 基于配置的环境

有时,我们可能希望禁用服务注册。例如,在开发环境中,我们可能想要在本地测试时不启用发现客户端,因为每次测试都运行Eureka服务器可能会显得多余。下面来看看如何实现这一点。

我们将更改application.properties文件中的属性,根据环境启用或禁用发现客户端。

3.1. 使用独立的属性文件

一种流行且简单的方法是为每个环境使用独立的属性文件

创建一个名为application-dev.properties的新属性文件:

spring.cloud.discovery.enabled=false

我们可以使用spring.cloud.discovery.enabled属性来启用或禁用发现客户端。这里我们设为false以禁用发现客户端。

dev环境激活时,系统会使用此文件而不是原始的属性文件。

3.2. 使用多文档文件

如果我们不想为每个环境使用单独的文件,另一个选择是使用多文档属性文件

我们将添加两个属性来实现这个功能:

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

对于这种方法,我们使用#—将属性文件分为两部分。然后使用spring.config.activate.on-profile属性。这两个属性结合使用,指示应用程序仅在当前部分的属性有效时读取配置,如果活跃了某个配置文件。在我们的例子中,我们将使用dev配置。

同样地,我们在dev配置下将spring.cloud.discovery.enabled属性设为false

这样,dev配置下禁用发现客户端,但在其他配置下仍然启用。

4. 测试

现在,运行Eureka服务器和发现客户端,检查一切是否按预期工作。我们还没有添加配置文件。当运行应用时,发现客户端将与Eureka服务器注册。在Eureka服务器仪表板上可以看到:

Eureka服务器仪表板上显示发现客户端实例

4.1. 配置文件下的测试

接下来,我们在运行应用时添加配置。可以通过命令行参数-Dspring.profiles.active=dev启用dev配置。这次运行应用时,我们可以看到客户端没有再与Eureka服务器注册:

5. 总结

在这篇教程中,我们学习了如何基于配置文件来添加环境特定的配置。我们也使用相同的方法来根据活跃配置禁用发现客户端。

如往常一样,本教程的代码可在GitHub上找到。