如何让 Spring Boot 客户端的 application.yml 从配置服务器获取值

Posted

技术标签:

【中文标题】如何让 Spring Boot 客户端的 application.yml 从配置服务器获取值【英文标题】:how to make spring boot client's application.yml get value from config server 【发布时间】:2018-08-10 10:10:31 【问题描述】:

有没有办法让spring cloud config客户端的application.yml从spring config服务器读取值? 例如, 在我的spring cloud config客户端上,application.yml是这样的

spring:
  application:
  name: clienttest
mvc:
view:
  prefix: /jsp/
  suffix: .jsp


server: 
  port: 8080
  context-path: /clienttest
  tomcat:
   uri-encoding: UTF-8

eureka:
 client:
   service-url: "defaultZone":"http://dev.euraka01.app.com:8769/eureka/,http://dev.euraka02.app.com:8770/eureka/"
instance:
 prefer-ip-address: true

我的 bootstrap.yml 文件如下

spring:
  application:
    name: clienttest
  cloud:
    config:
      name: clienttest
      uri: http://192.168.2.101:9000
      enabled: true
      profile: out_test
      label: master

现在对于 service-url 值,对于不同的环境,我必须配置不同的 eureka url 值,我的问题是,无论如何我可以在配置服务器中配置 service-url 值吗?就像我在 application.yml 中将值设置为 $service-url 一样,当我启动配置客户端服务器时,它会根据我在 bootstrap.yml 中设置的配置文件和标签从配置服务器获取值。

【问题讨论】:

【参考方案1】:

您可以通过配置文件和标签在配置服务器上查找属性,其中标签是分支、标签。

/application/profile[/label]
/application-profile.yml
/label/application-profile.yml
/application-profile.properties
/label/application-profile.properties

在上面的示例中,您的配置服务器将尝试查找名为

的文件
clienttest-out_test.properties

在 master 分支的 git repo 中。

spring:
  application:
    name: clienttest
  cloud:
    config:
      profile: out_test
      label: master

参见example 和一个很好的文档here

【讨论】:

【参考方案2】:

埃塞克斯男孩, 非常感谢您的帮助,我之前能够从不同的配置文件中读取值。 我的问题是如何让 application.yml 从配置服务器获取值,现在我自己解决了,答案很简单,在应用程序中设置值,如 $service-url,完整答案是如下:

在我的application.yml中,内容如下:

spring:
  application:
  name: clienttest

server: 
  port: 8080
  context-path: /clienttest
  tomcat:
   uri-encoding: UTF-8

eureka:
 client:
   service-url:     "defaultZone":"$service-url"
instance:
 prefer-ip-address: true

请注意 service-url 的值,现在该值设置为 "defaultZone":"$service-url",在我的配置服务器上的 application.properties 文件中,属性文件内容是如下:

service-url=http://192.168.2.101:8769/eureka/,http://192.168.2.101:8770/eureka/

然后当我启动 mocroservice 时,它​​可以在 http://192.168.2.101:8769/eureka/ 和 http://192.168.2.101:8770/eureka/ 上自行抵抗

这是我想要的结果。

【讨论】:

以上是关于如何让 Spring Boot 客户端的 application.yml 从配置服务器获取值的主要内容,如果未能解决你的问题,请参考以下文章

带有 AsyncRestTemplate Netty 客户端的 Spring Boot 失败

面向公共客户端的 Spring Boot 2 授权服务器 (PKCE)

Spring Boot + Spring Cloud 构建微服务系统:API服务网关(Zuul)

Spring Boot 2 - 自动装配服务时对 Feign 客户端的不满意依赖

spring boot 1.5.2中eureka客户端如何找到eureka server?

Spring boot集成swagger2