我正在使用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”。并且其中的属性也应动态加载。