Проблема в Spring Boot со слиянием списков в yml

Коллеги, помогите, пожалуйста. Наш продуктовый конфиг хранится в yml-файлах. У нас есть два профиля Spring, business and custom.
Продуктовый конфиг содержит продуктовые константы (briefCode, systemId и другие).
Профиль business — часть приложения, общая для всех сред разворачивания (local, development, test и production).
Профиль custom используется только на стенде тестирования (test, предпрод) нашими тестировщиками для дополнения профиля business некоторыми особенностями окружения test.

И вот в чём проблема. Допустим, это фрагмент application-business.yml (вшитого в каждую сборку):

PRODUCT_CODE1:
  - { name: briefCode, value: '0001' }
  - { name: systemId, value: ABC }

а это фрагмент application-custom.yml (присутствующего только в окружении test, на котором не заведены наши логины и приходится хардкодить, перебивая реальное свойство продукта взятым из конфига):

PRODUCT_CODE1:
  - { name: login, value: hardcodedLogin }

И при такой настройке в окончательную конфигурацию продуктовых свойств в окружении test попадает только свойство login.
Соответственно, мне приходится дублировать поля briefCode и systemId и в application-custom.yml
Но тогда, если в какой-то момент systemId продукта PRODUCT_CODE1 в application-business.yml сменится, скажем, на BCD, то в окружении test возникнет несоответствие, так как итоговая конфигурация будет содержать устаревшее значение systemId=ABC.

Это и есть моя проблема с дублированием содержимого списков, которые невозможно слить.

Мой другой подход к решению проблемы заключался в использовании Map<String, ?> вместо List<?>.

Но я столкнулся с другой проблемой (не менее контринтуитивной, чем первая): названия некоторых продуктовых свойств начинаются с двух решёток (##), а некоторые содержат точку (.).
И Spring читает их очень странно.

PRODUCT_CODE1:
  '##key1': value1
  "##key2': value2
  'k.e.y3': value3
  "k.e.y4": value4

И вот полученный в Spring Map для PRODUCT_CODE1: key1=value1, key2=value2.
Восхитительно! Решётки обрезаны. Свойства с точками в названии просто пропущены.
И это несмотря на одинарные и двойные кавычки!

Есть другие способы решения проблемы, о которых я, возможно, ещё не задумывался?

Я что-то упускаю? Или делаю что-то не так?

Пожалуйста, направьте меня.

Заранее спасибо!

С уважением, L.B.

P.S. На английском S&O мне уже указали в комментарии, что это плохой дизайн, yml-конфиг только для технических настроек.
Но мы вынуждены использовать его с такой целью, так как бизнесу нужна возможность в случае необходимости экстренно поменять ту или иную продуктовую константу без пересборки, поэтому хардкод в коде здесь не применим.
А так как у нас stateless приложение, то и в базе хранить не вариант.


Ответы (0 шт):