У меня есть несколько профилей в файле конфигурации моего приложения, 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. Есть ли способ установить его один раз для этих трех профилей, что-то группирующее профили или унаследованное от базового профиля?




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