Настройка конфигурации пружины для нескольких профилей

У меня есть несколько профилей в файле конфигурации моего приложения, application.yml, как в следующем примере:

spring:
  application:
    name: my-super-app
database:
  secret: "default secret"
this:
  that: "default value..."

---

spring:
  profiles: staging


---

spring:
  profiles: qa
database:
  secret: "foo bar"

---

spring:
  profiles: playground
database:
  secret: "foo bar"

---

spring:
  profiles: production
database:
  secret: "foo bar"

Как очевидно, я произвольно установил конфигурацию database.secret для профилей qa, playground и production, кроме staging. Есть ли способ установить его один раз для этих трех профилей, что-то группирующее профили или унаследованное от базового профиля?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 727
1

Ответы 1

Вы можете объединить профили в список, разделенный запятыми (qa,playground,production), например:

spring:
  application:
    name: my-super-app
common-secret: "foo bar"
database:
  secret: "default secret"
this:
  that: "default value..."

---

spring:
  profiles: staging


---

spring:
  profiles: qa

---

spring:
  profiles: playground

---

spring:
  profiles: production

---

spring:
  profiles: qa,playground,production
database:
    secret: "foo bar"

В качестве альтернативы вы можете установить «общую переменную» примерно так:

spring:
  application:
    name: my-super-app
common-secret: "foo bar"
database:
  secret: "default secret"
this:
  that: "default value..."

---

spring:
  profiles: staging


---

spring:
  profiles: qa
database:
  secret: ${common-secret}

---

spring:
  profiles: playground
database:
  secret: ${common-secret}

---

spring:
  profiles: production
database:
    secret: ${common-secret}

да, но у этого есть побочный эффект: common-secret также будет виден всем профилям, включая промежуточный. что мне не кажется правильным.

Muatik 18.06.2018 23:43

В вашем исходном вопросе не указывалось никаких ограничений на объем решения. То, что я предложил, действительно работает. Я добавлю к своему исходному ответу альтернативное решение, которое удовлетворит ваши дополнительные требования.

StvnBrkdll 20.06.2018 02:52

@Mualik В ответ на ваш 1-й комментарий: «common-secret также будет виден для всех профилей, включая промежуточный»: хотя он «виден» для промежуточного профиля (и всех профилей), на самом деле он не влияет на промежуточный профиль, поскольку промежуточный профиль не использует переменную $ {common-secret}. Это влияет только на профили, содержащие database.secret: ${common-secret}, такие как qa, игровая площадка и производство.

StvnBrkdll 20.06.2018 03:41

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