Несколько профилей Spring с разными именами

У меня есть приложение 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?

почему вы не можете иметь отдельный файл yml для каждой среды (например, application-dev.yml, application-qa.yml, application-preProd.yml, application-prod.yml)? Таким образом, ваш код может поддерживаться в хорошем состоянии и менее подвержен ошибкам.

Naveen 30.05.2019 19:09
0
1
831
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Слияние работает отлично!

дано:

@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
  • загружать реквизиты из 'prod'
  • объединить с реквизитом «другое» объединяет значения dev

Другие вопросы по теме