当应用程序执行

时间:2016-05-06 14:13:00

标签: java spring spring-boot spring-cloud microservices

我遇到了spring cloud的问题:我在app.in执行时没有使用spring.cloud.config的application.yml中的设置。让我在这里详细说明。 我希望我的服务可以从远程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

并在app中进行额外配置:

    @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:GET请求的I / O错误" http://localhost:8888/mw/default"

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

我做错了什么? 感谢。

1 个答案:

答案 0 :(得分:3)

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

spring:
    cloud:
        config:
            enabled: true

根据注释链,您还需要将属性添加到bootstrap.yml而不是application.yml。原因是前者在春季启动周期中被加载到后者之前。以下是用户Michael Isvy解释原因的另一篇SO帖子,并在下面复制后代:What is the diference between putting a property on application.yml or bootstrap.yml in spring boot?

  

我刚刚问Spring Cloud家伙,并认为我应该分享我在这里的信息。

     

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

     

通常用于以下内容:

     
      
  • 使用Spring Cloud Config Server时,您应在spring.application.name
  • 中指定spring.cloud.config.server.git.uribootstrap.yml   
  • 一些encryption/decryption信息
  •   
     

从技术上讲,bootstrap.yml由父Spring ApplicationContext加载。父ApplicationContext在使用application.yml。

之前加载