Config Client如何从git存储库中的多个yml / properties文件动态获取属性?

时间:2019-04-10 02:43:27

标签: spring-boot rabbitmq netflix-eureka spring-cloud-bus

我正在使用Eureka和Spring Cloud Configuration Server制作系统。 一台Eureka服务器,一台配置服务器,Zuul和一台微服务。 除Eureka Server以外的三个是Eureka Client。 微服务通过Config Server从git存储库获取配置属性。同样,在使用RabbitMQ和RefreshScope批注在git存储库中编辑yml文件后,它可以动态获取它们。

问题是我不知道如何从git存储库中的多个yml / properties文件以应用程序名称以外的各种名称动态获取属性。它对于以应用程序名称命名的yml文件中的属性非常有效。但这不适用于那些application-profile.yml。

我想要许多不同名称的yml文件。您是否必须使用环境参数(应用程序,配置文件或标签)来命名yml文件?

RabbitMQ知道要更新什么文件,但不知道更改了哪些确切的属性。

这是微服务的bootstrap.yml。

server:
 port: 8080 
spring:
 application:  
   name: serviceA 
 cloud:
  config:     
    uri: http://localhost:8999
  profiles:
    active: 1, 2, 3, 4, 5

这是微服务的RestController。

@RestController
@RefreshScope
@AllArgsConstructor
@EnableAutoConfiguration
@EnableConfigurationProperties(RefreshConfig.class)
 public class WebRestController {

  @Autowired
  private RefreshConfig refreshCofig;   

  @Value("${my.greeting}")
  private String greeting;

  @Value("${a}")
  private String a;

  @GetMapping("/realtime")
  public String realtime() {
     String show = "a :"+refreshCofig.getA()+"\n";
     show += "b :"+refreshCofig.getB()+"\n";
     show += "c :"+refreshCofig.getC()+"\n";
     show += "d :"+d+"\n";
     show += "e :"+e+"\n";
     show += "greeting "+greeting;               
      return show;
  }

}

这是Restcontroller中使用的RefreshConfig

@ConfigurationProperties
 public class RefreshConfig {
    private String a;
    private String b;
    private String c;
    private String d;
    private String e;
    public String getA() {
    return a;
    }
    public void setA(String a) {
     this.a = a;
    }
    public String getB() {
      return b;
    }
    public void setB(String b) {
      this.b = b;
    }
    public String getC() {
      return c;
    }
    public void setC(String c) {
      this.c = c;
    }
    public String getD() {
      return d;
    }
    public void setD(String d) {
      this.d = d;
    }
    public String getE() {
     return e;
    }
    public void setE(String e) {
      this.e = e;
    }

  }

这是我的git存储库中的serviceA.yml 我可以通过restcontroller动态获取此属性。

my: 
  greeting:  hello!

这是我的git存储库中的serviceA-1.yml。 我无法动态加载属性“ a”。

a : this is property A

如果可能的话,我想为一个微服务拥有多个各种命名的yml文件。例如,我想要应用程序“ serviceA”的“ custom.yml”,“ legacy.yml”和“ message.yml”。并且其中的属性也应动态加载。

0 个答案:

没有答案