最近研究微服务,使用Eureka搭建了注册中心,并且使用SpringCloudConfig做配置中心

当配置中心注册到注册中心以后,消费端在bootstrap.yml通过以下配置即可获取到配置数据

spring:
  profiles:
      active: ${#help.profile#:dev}      #运行环境占位符,打包时被替代
  cloud:
      config:
        discovery:
          enabled: true
          serviceId: help-config-server
        profile: ${spring.profiles.active}    #使用运行环境名作为配置环境名
        name: helpStarter
  application:
    name: help-starter

但是当对配置中心设置了context-path

server:
  port: 8888
  servlet:
    context-path: /config

以后,却无法正确获取,查看日志发现,消费端在获取配置时,访问的是127.0.0.1:8888,并没有增加/config,考虑到后期维护,写死URL肯定不行,在查阅了很久资料以后才发现,可以在配置中心的eureka注册部分增加如下配置

eureka:
  instance:
    preferIpAddress: true
    health-check-url: http://localhost:${server.port}${server.servlet.context-path:}/actuator/health
    status-page-url: http://localhost:${server.port}${server.servlet.context-path:}/actuator/info
    home-page-url: http://localhost:${server.port}${server.servlet.context-path:}
    metadata-map:
      configPath: ${server.servlet.context-path:}
      management.context-path: ${server.servlet.context-path:}
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:5000/eureka/

如此即可在消费端获取到正确的配置信息

但要主要,当不使用context-path时,应配置成""或注释掉整个servlet.context-path节点,而不是设置为/,否则消费端会报错

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐