Spring Cloud 配置客户端未从配置服务器加载配置

问题描述 投票:0回答:8

我正在点击此链接: http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html#_client_side_usage

我测试了一遍又一遍,没有看到Spring cloud客户端正在从云服务器加载配置,请帮忙看看错误在哪里:

POM:

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

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

    </dependency>
</dependencies>

应用:

@Configuration
@EnableAutoConfiguration
@RestController
public class ConfigclientApplication {
    
    @Value("${spring.cloud.config.uri}")
    String url;
    
    @Value("${production.host}")
    String host;
    
    
    @RequestMapping("/")
    public String home() {
        return "Host is  => " + this.host ;
    }
    
    public static void main(String[] args) {
        SpringApplication.run(ConfigclientApplication.class, args);
    }
}

bootstrap.properties: spring.cloud.config.uri=http://localhost:8888

  1. 配置服务器很好: http://localhost:8888/spirent/default
{
  "name": "spirent",
  "profiles": [
    "default"
  ],
  "label": "master",
  "propertySources": [
    {
      "name": "classpath:/spirent.yml",
      "source": {
        "production.host": "server1",
        "production.port": 9999,
        "production.value1": 12345,
        "test.host": "server2.com",
        "test.port": 4444,
        "test.value": "hello123"
      }
    }
  ]
}
  1. 现在http://localhost:8080/根本无法启动。

    创建名为“configclientApplication”的 bean 时出错 看来@Value的自动注入找不到生产.主机环境值。

从配置服务器加载后如何读取客户端中的配置?

感谢您的帮助。

spring cloud config
8个回答
45
投票

如果您使用的是 2020.0.0 版本的 Spring Cloud,则需要将此依赖项添加到您的 Maven 依赖项中以启用 config bootstrap,该功能在 2020.0.0 中默认禁用。

2020.0.0 的重大变更

这对我有用。

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

25
投票

对于那些使用与 Spring Boot 相关的默认 Maven Spring Cloud 依赖版本到 2.4.0 或 2.4.1(例如,Spring Boot 2.4.0 的 2020.0.0-M5)之后到达这里的人,除了遵循 RubesMN 的好建议之外,请注意在此类 Spring Cloud 依赖项中,默认情况下不启用引导。根据Spring Cloud 2020.0发行说明

spring-cloud-commons 提供的 Bootstrap 默认不再启用。如果您的项目需要它,可以通过属性或新的启动器重新启用它。

  • 要通过属性设置 spring.cloud.bootstrap.enabled=true 或 spring.config.use-legacy-processing=true 重新启用。这些需要设置为环境变量、java 系统属性或命令行参数。
  • 另一个选项是包含新的 spring-cloud-starter-bootstrap (在 POM 文件中)。

我使用了第二个选项,效果很好。


11
投票

如果您使用的是 2020.0.0 版本的 Spring Cloud,那么您需要在 Maven 依赖项中添加此依赖项以启用 Bootstrap,默认情况下禁用:

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

8
投票

正如 Deinum 所暗示的那样,我会确保您将客户端配置为 spring-cloud-starter-parent 并为其提供一个版本。 当您包含在依赖项中并记住 cloud 与 boot 是不同的项目时,Spring Cloud 提供的 Maven 插件将无法工作。 更改为: <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>1.0.0.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent>

其次,作为一个新的学科(可能不是你的问题),我会在你的应用程序上使用新的注释,而不是 @Configuration 和 @EnableAutoConfiguration

@SpringBootApplication

第三,仔细检查您的配置服务器上是否有@EnableConfigServer

第四,确保客户端上的 bootstrap.properties 指定了您的 Spring 应用程序名称:

spring.application.name=spirent

最后,如果您使用了 spring-cloud-config 示例项目,则必须在 URI 中设置默认用户和安全密码:

http://user:ddf4757e-0077-42e4-b2ad-2ae04340b08c@localhost:8888

否则,请尝试从此处的 spring-cloud-config 项目开始,以确保您的配置服务器设置正确:

https://github.com/spring-cloud/spring-cloud-config



6
投票

    配置服务器应该有:[
  • spring-cloud-config-server

    ]
    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> <relativePath/> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>2020.0.3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> </dependencies>

  • 客户服务应具备:[
  • spring-cloud-starter-config

    ]
    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> <relativePath/> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>2020.0.3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> </dependencies>

  • 客户服务应声明:在
  • application.properties

    application.yml
    
    
    #This does not work #spring.cloud.config.uri=http://localhost:8880/config-server spring.application.name=name-by-which-properties/yml-file-is-created spring.config.import=optional:configserver:http://host:port/application-context management.endpoints.web.exposure.include=*

    
    
  • 什么对我不起作用:

添加
    spring-cloud-starter-bootstrap
  • 添加
  • spring-cloud-starter-parent
  • 
    
  • 希望这能帮助像我这样的人
Spring Boot (2.5.3)

Spring Cloud 2020.0.3
    


1
投票
spring-cloud-starter-bootstrap

后,请确保还添加以下依赖项 -

<dependency>
  <groupId>io.pivotal.spring.cloud</groupId>
  <artifactId>spring-cloud-services-starter-config-client</artifactId>
</dependency>



1
投票

确保您的应用程序名称已在客户端应用程序中定义。 确保服务名称应与配置服务器中的文件名相同。

示例 - 我有一个

order-service

,文件名为

order-service.properties
    


0
投票
spring-boot

版本的问题。

Spring-cloud-starter-config
依赖关系不适用于较旧的 spring-boot 版本。尝试将您的
spring-boot
版本更改为可能高于
2.4.0
的最新版本。
以下

gradle

实施对我有用:

id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'

	
© www.soinside.com 2019 - 2024. All rights reserved.