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服务器仪表板上也可以看到:
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服务器仪表板上可以看到:
4.1. 配置文件下的测试
接下来,我们在运行应用时添加配置。可以通过命令行参数-Dspring.profiles.active=dev
启用dev
配置。这次运行应用时,我们可以看到客户端没有再与Eureka服务器注册:
5. 总结
在这篇教程中,我们学习了如何基于配置文件来添加环境特定的配置。我们也使用相同的方法来根据活跃配置禁用发现客户端。
如往常一样,本教程的代码可在GitHub上找到。