Я делаю систему с 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".А также свойства в них должны загружаться динамически.