docker部署spring cloud config 无法读取本地(native)文件的解决方法

最近在练手一个微服务项目,在spring cloud config中并没有选择把配置文件挂在git上,而是使用了native模式

#配置当前服务的名称
spring:
  application:
    name: itoken-config #配置服务名称
  profiles:
    active: native #设置为本地启动的方式,而不是通过git
  cloud:
    config:
      server:
        native:
          searchLocations: classpath:/shared   # 配置文件所在目录

在开发环境中一切都很美好,但是当我尝试将eureka、config、zipkin、admin 部署到生产环境时却发生了问题:

eureka虽然都注册上了,但是 admin 和 zipkin 却只有config 能注册上。

至于为什么config能注册上,那肯定是因为config注册zipkin和admin的配置文件就是自己的application.yml,而其他的配置文件都是托管在config的classpath:/shared目录下的,那么就可以猜想:是不是其他的服务根本就无法从config那获取自己的配置呢?

于是我又写了一个服务,让其获取配置信息并返回

@RestController
@RequestMapping("demo")
public class DemoController {

    @Value("${xtx.test1}")
    private String test1;

    @Value("${xtx.test2}")
    private String test2;

    @Value("${xtx.test3}")
    private String test3;

    @Value("${spring.zipkin.base-url}")
    private String zipkin;

    @Value("${spring.boot.admin.client.url}")
    private String admin;

    @GetMapping("test")
    public String test(){
        return "hello world";
    }


    @GetMapping("show")
    public String show(){
        return this.test1+">"+this.test2+">"+this.test3+">"+this.zipkin+">"+this.admin;
    }
}

假定该服务名为:demo-service

xtx.test1 写在了自己的application.yml中

xtx.test2 写在了config的classpath:/shared/application.yml中

xtx.test3 则写在了classpath:/shared/demo-service.yml中

这样我便可以通过show方法获取配置信息了。

结果果真如我猜想,demo-service压根就起不来,直接报错:无法获取$:{xtx.test2}

于是在我上下求索了数小时之久后我终于找到了关键问题所在,下面直接给出结论:

1、如果是将配置文件托管在第三方的话,应该使用配置:

spring:
  application:
    name: itoken-service-admin
  cloud:
    config:
      discovery:
          service-id: itoken-config  #配置中心的spring.application.name
          enabled: true
      profile: dev                   #会去找 itoken-service-admin-dev.yml

2、如果是将配置文件放在本地,则应该使用配置:

spring:
  application:
    name: itoken-service-admin
  cloud:
    config:
      profile: dev
      name: itoken-service-admin   
      uri: http://localhost:8888

# 根据{spring.cloud.config.name}-{spring.cloud.config.profile}.yml 
# 去{spring.cloud.config.uri}去找对应的配置

如上配置后:

docker部署spring cloud config 无法读取本地(native)文件的解决方法_第1张图片

docker部署spring cloud config 无法读取本地(native)文件的解决方法_第2张图片

docker部署spring cloud config 无法读取本地(native)文件的解决方法_第3张图片

你可能感兴趣的:(编程日记,微服务架构)