当前位置: 首页 > 知识库问答 >
问题:

Spring云配置服务器上的属性不会注入到Spring应用程序中

华欣荣
2023-03-14

我正在自学SpringCloudConfig服务器,在将属性注入bean时遇到了一些问题。

因此,我有一个简单的Spring Boot应用程序作为配置客户端,仅用于测试:

@SpringBootApplication
@ConfigurationProperties
public class DemoApplication {

    @Value("${greeting}")
    static private String greeting;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);  
        System.out.println("The greeting is: " + greeting);
    }
}

但系统会打印:

The greeting is: null

检查envendpoint时,我实际上发现"${greting}"属性位于环境中:

profiles: [ ],
configService:https://github.com/mstine/config-repo.git/demo.yml: {
greeting: "Webhook"
},
configService:https://github.com/mstine/config-repo.git/application.yml: {
eureka.instance.hostname: "localhost",
eureka.instance.leaseRenewalIntervalInSeconds: 10,
eureka.instance.metadataMap.instanceId: "${vcap.application.instance_id:${spring.application.name}:${server.port:8080}}",
eureka.client.serviceUrl.defaultZone: "${vcap.services.service-registry.credentials.uri:http://127.0.0.1:8761}/eureka/",
foo: "barnyardAnimal"
},

请注意,在configService中,有一个名为greeting的属性,其值为“Webhook”

我是Spring框架的新手,所以我想知道我是不是搞砸了什么?有人建议我也可以使用Environment访问外部属性,但我没有找到太多关于如何使用它的教程。有什么想法吗?

===============================================================================================================================================================添加配置服务器的代码:

应用爪哇:

package io.spring.cloud.samples.fortuneteller.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

应用yml:

server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/mstine/config-repo.git

共有3个答案

厉钊
2023-03-14

只是不能将属性作为静态字段注入。试着把它注入一些@Component

谭成业
2023-03-14

据我所知,你忘了加上

@EnableDiscoveryClient

在客户端应用程序的主类之上

我这样做了,它在类似的情况下对我起了作用

隆功
2023-03-14

我认为您也需要创建和启动服务器,我没有看到代码

@SpringBootApplication
@EnableConfigServer
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

启用服务器后,客户端需要连接到服务器并请求服务器为其存储的配置参数。此服务器需要存储。要在其中存储值的yml。

客户端代码需要与服务器交谈,并使用bootstrap.yml询问特定的值

---
spring:
  profiles:
    active: northamerica
  application:
    name: koitoerclient
  cloud:
     config:
       uri: http://localhost:8001
server:
  port: 8002

您可以在github中找到配置和客户端和服务器代码的示例,非常简单,因此您可以理解整个配置。

 类似资料:
  • 我的Spring Boot应用程序与Spring云配置服务器连接以获取外部化属性,但突然没有与配置服务器连接/对话。我做了很多改变,不确定哪一个会导致这个问题。 > 我验证了我的Spring Boot应用程序中的bootstrap.yml文件,以下配置存在,并且Spring云配置服务器正在该位置运行 spring:application:name:abc cloud:config:uri:http

  • 我有一个web应用程序,我想使用Spring Boot的服务器配置。这两个应用程序都位于本地主机上。我从头开始创建了前两个应用程序,它们一起工作,但当我使用具有许多依赖项(不仅仅是云配置和web依赖项)的客户端时,它就不再工作了。我怎么知道?我在服务器的属性文件中有一个变量,我试图在我的客户机中用@Value(“${atena}”)来使用它,错误出现在java中。lang.IllegalArgum

  • 我这样配置Spring Cloud Config服务器: 由于某些原因,resolvePlaceholders不适用于JSON表示,因此服务器配置客户机需要知道服务器上配置的所有ENV变量。 是否可以强制JSON表示resolvePlaceholders与纯文本(属性)表示相同?

  • 我正在使用Spring Cloud Config服务器,能够检测来自git存储库的更改并将其传递给配置客户机。 有两种方法,我已经实现了: null 所以两者都工作得很好,那么使用Spring Cloud Bus有什么好处吗?或者在生产环境中,不使用Spring Cloud Bus会有什么问题吗?因为将需要额外的工作来设置RabbitMQ集群(HA)作为生产中的Spring云总线。 谢谢,大卫

  • 只是在试用春云流 当我把它作为一个独立的jar运行时(就像另一个springboot应用程序一样),它尊重这个应用程序。物业和所有工程按预期进行。 当我使用SCDF创建流时,它会忽略属性,并使用约定流名称创建交换。app_名称不是我想要的。 我希望在某个时候,我希望这些应用程序与SpringCloudConfig服务器集成,在那里我可以从不同的来源完全外部化配置。 有人可以建议我遗漏了什么,以便S

  • 我希望将concur严格用作配置源。我正在使用spring cloud Consor配置来获取配置。我正在使用git2consul将文件加载到Consor并读取它们。根据spring云文档,我在构建中添加了以下内容。格拉德尔 并在我的application.properties 我面临的问题是,预期的属性没有加载到ConfigurationProperties bean中。在ConsultProp