У меня есть приложение Spring Boot, и у меня есть application.yml для свойств. У меня есть несколько профилей в одном файле, как показано ниже:
spring:
profiles: dev
property:
one: bla
two: blabla
---
spring:
profiles: preProd, prod
another-property:
fist: bla
secong: blabla
---
spring:
profiles: prod
property:
one: prod-bla
two: prod-blabla
Итак, мой вопрос: когда я запускаю приложение с профилем prod
Только, объединяет ли Spring оба профиля, и я вижу в приложении как property
, так и another-property
?
Слияние работает отлично!
дано:
@SpringBootApplication
public class SoYamlSpringProfileMergeApplication {
private final Data data;
public SoYamlSpringProfileMergeApplication(Data data) {
this.data = data;
}
@EventListener(ApplicationReadyEvent.class)
public void showData() {
System.err.println(data.getOne());
System.err.println(data.getTwo());
System.err.println(data.getThree());
}
public static void main(String[] args) {
SpringApplication.run(SoYamlSpringProfileMergeApplication.class, args);
}
}
@Component
@ConfigurationProperties(prefix = "data")
class Data {
private String one = "one default";
private String two = "two default";
private String three = "three default";
public String getOne() {
return one;
}
public String getTwo() {
return two;
}
public String getThree() {
return three;
}
public void setOne(String one) {
this.one = one;
}
public void setTwo(String two) {
this.two = two;
}
public void setThree(String three) {
this.three = three;
}
}
а также
spring:
profiles:
active: "other"
---
spring:
profiles: dev
data:
one: one dev
two: two dev
---
spring:
profiles: prod
data:
one: one prod
two: two prod
---
spring:
profiles: other
data:
three: three other
будет печатать:
one dev
two dev
three other
и с:
spring:
profiles:
active: "other,prod"
one prod
two prod
three other
важный порядок активный:"другое,продукт" имеет значение!
с использованием
spring:
profiles:
active: "prod,other"
будет выводить
one dev
two dev
three other
почему вы не можете иметь отдельный файл yml для каждой среды (например, application-dev.yml, application-qa.yml, application-preProd.yml, application-prod.yml)? Таким образом, ваш код может поддерживаться в хорошем состоянии и менее подвержен ошибкам.