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

app执行时不使用application.yml中spring.cloud.config的设置

钱旻
2023-03-14

我对spring cloud有一个问题:我在application.yml中对spring.cloud.config的设置在应用程序执行时没有使用。让我在这里提供更多的细节。我希望我的服务可以从远程ConfigServer获取设置。我将ConfigServer创建为一个带有注释@EnableConfigServer的spring boot应用程序。之后,我用下一个配置文件创建了客户端应用程序:

    application:
      name: mw
    cloud:
      config:
        enabled: true
        uri: http://172.17.42.1:8888
        fail-fast: true

主类:

    @EnableEurekaClient
    @SpringBootApplication
    public class MwApplication

和额外配置:

    @Configuration
    @EnableJpaRepositories(basePackages = {"com.sample.repository"})
    @EnableTransactionManagement
    @EnableScheduling
    public class AppConfiguration

我还有下一个依赖项:

    spring-cloud-starter-eureka
    spring-cloud-config-client
    spring-boot-configuration-processor
    spring-boot-starter-data-jpa

当我执行客户端应用程序时,出现以下消息:ConfigServicePropertySourceLocator:无法定位PropertySource:获取请求“http://localhost:8888/mw/default”时出现i/O错误

应用程序尝试从默认uri(localhost)获取数据,而不是从我的设置中使用uri。我在调试模式下查看了app,看到org.springframework.cloud.config.client.configServiceBootstrapConfiguration正在创建带有默认属性的ConfigClientProperties,而我在application.yml中的设置没有被使用。

我做错了什么?多谢了。

共有1个答案

皇甫乐
2023-03-14

您需要在application.yml文件中添加以下内容:

spring:
    cloud:
        config:
            enabled: true

在每个注释链中,您还需要将属性添加到bootstrap.yml而不是application.yml。原因是前者在spring启动周期中先于后者加载。下面是用户Michael Isvy回答的另一个SO帖子,解释了原因,并将其复制如下,以飨读者:在spring boot将属性放在application.yml或bootstrap.yml上的区别是什么?

我刚刚问了spring cloud的人,我想我应该在这里分享我的信息。

bootstrap.yml在application.yml之前加载。

它通常用于以下方面:

  • 使用spring cloud配置服务器时,应在bootstrap.yml
  • 中指定 Spring.application.nameSpring.Cloud.Config.Server.git.uri
  • 一些html" target="_blank">加密/解密信息

技术上,bootstrap.yml由父spring ApplicationContext加载。该父ApplicationContext在使用Application.yml的父ApplicationContext之前加载。

 类似资料:
  • 如何在中正确指定根日志级别? 如何在中正确指定logstash编码器?

  • 代码activity_lastcall.xml: 代码lastcall.java: 代码AndroidManifest.xml: 我需要得到最后一个电话,并在TextView中写入号码和姓名。

  • 我在docker-compose.yml中使用,但老实说,这似乎没有什么不同。不是在一篇文章中抛出一堆问题,但无论发生了什么,这是否也是我只能在使用Docker Compose运行web服务器时才能在浏览器中访问web服务器的原因?

  • 当我试图运行测试时,我和詹金斯的情况很奇怪。 作业的配置明确指定在这个特定的avd上运行测试:“hudson_en-US_160_HVGA_android-18_armeabi-v7a”,但是由于一些奇怪的原因,在构建过程中,发现了2个设备。其中一个设备是前一个,但另一个被称为“未知sdk”。 测试在特定的avd上成功执行,并在"unnode-sdk"上失败: 日志的相关部分: [SR.runTe

  • 我正在使用最新的JMeter 3.3运行最新的Selenium WebDriver测试,一切似乎都很好, 我只有1个线程配置了1秒的爬升和1个循环计数,但是在webdriver执行完成后,JMeter并没有停止整个测试执行,而是无限期地继续执行测试,我不确定为什么会发生这种情况,我正在使用chromedriver,我所做的所有配置都是按照JMeter文档进行的,我还添加了命令位于脚本末尾。请参考附

  • 我希望在使用运行测试时,控制台尽可能安静,除非出现问题。再说一次,当我在Eclipse中编写测试时(换句话说,当我在Eclipse中运行单个junit测试时),它们可以非常详细。 因此,当我使用surefire运行所有测试时,我需要一种方法来拥有不同的log4j/logback设置,而不是在Eclipse中一个接一个地运行它们。有没有办法做到这一点?