Как клиент Config может динамически получать свойства из нескольких файлов yml / properties в вашем git-репозитории? - PullRequest
0 голосов
/ 10 апреля 2019

Я делаю систему с Eureka и Spring Cloud Configuration Server.Есть один Eureka Server, один Config Server, Zuul и один микро сервис.Три отдельно от Eureka Server являются Eureka Client.Микро-сервис получает свойства конфигурации из репозитория git через Config Server.Также он получает их динамически сразу после редактирования файлов yml в репозитории git с аннотацией RabbitMQ и RefreshScope.

Проблема в том, что я понятия не имею, как получить свойства динамически из нескольких файлов yml / properties в репозитории git с различными именами, кроме имени приложения.Это хорошо работает для свойств в файлах yml, названных в честь имени приложения.Но это не работает для этих application-profile.yml.

Я бы хотел много yml-файлов с различными именами.Нужно ли называть yml-файлы параметрами среды: application, profile или label?

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;
  }

}

Это RefreshConfig, используемый в Restcontroller

@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;
    }

  }

ЭтоserviceA.yml в моем git-репозитории Я могу получить это свойство динамически через restcontroller.

my: 
  greeting:  hello!

Это serviceA-1.yml в моем git-репо.Я не могу загрузить правильную букву «а» динамически.

a : this is property A

Если это возможно, я бы хотел иметь несколько различных именованных файлов yml для одного микросервиса.Например, я хочу "custom.yml", "legacy.yml" и "message.yml" для приложения "serviceA".А также свойства в них должны загружаться динамически.

...