Spring Profile включает проблему с файлом yaml

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

yaml файл

   ---
    spring:
      application:
        name: kicapp
      output:
        ansi:
          enabled: ALWAYS
      profiles:
        active: local
    #server:
      #context-path: /
      #port: 8080
    #logging:
      #level:
        #org.springframework.security: DEBUG
    ---
    spring:
      profiles: local
    ---
    spring:
      profiles: unittest
    ---
    spring:
      profiles: cloud
      test: loaded
    ---
    spring:
      profiles: websphere
        include: cloud

Когда я устанавливаю --spring.profiles.active=websphere, я получаю следующую ошибку

Вызвано: значения сопоставления не разрешены здесь, в 'reader', строка 28, столбец 12: include: cloud


person ndrone    schedule 12.02.2016    source источник
comment
Пытался убрать знак `` перед include?   -  person Marged    schedule 15.02.2016
comment
@Marged так, что include не вложен в profiles?   -  person ndrone    schedule 15.02.2016
comment
Смотрел на это? stackoverflow.com/questions/25985752/. Какую версию Spring вы используете?   -  person Marged    schedule 15.02.2016
comment
Я впервые просмотрел этот пост, но он не дал мне тех результатов, которые я ищу. Я хочу cloud только тогда, когда wesphere активен. Если вы измените профиль websphere на --- spring: profiles: active: websphere include: cloud test: websphere. Он всегда загружает профиль cloud. Я использую пружину 4.2 и пружинный пыльник 1.3.1   -  person ndrone    schedule 15.02.2016
comment
Попробуйте обновить до 1.3.2 и проверьте, справляется ли классический application.properties со своей задачей   -  person Marged    schedule 15.02.2016
comment
@Marged уже пробовал это и, конечно, работает, но не с файлом yaml. Тогда должно быть ограничение с yaml?   -  person ndrone    schedule 15.02.2016
comment
Какое из двух предложений? Вы когда-нибудь задумывались об указании двух профилей? Было бы это жизнеспособным?   -  person Marged    schedule 15.02.2016
comment
Позвольте нам продолжить это обсуждение в чате.   -  person ndrone    schedule 15.02.2016


Ответы (2)


Похоже, это ограничение парсера SnakeYAML и способа его использования Spring Boot. Поскольку yaml позволяет указывать несколько отдельных документов в одном файле с разделителем ---, способ разделения отдельных документов в Spring осуществляется с помощью ключа spring.profiles, ожидается, что этот ключ будет простой структурой, а не сложной структурой, к сожалению.

Хороший обходной путь - разбить это на несколько файлов следующим образом:

application.yaml с общим содержимым, application-<profile> с расширениями для конкретных профилей, с этой структурой ключ spring.profiles.include будет работать должным образом.

person Biju Kunjummen    schedule 15.02.2016

Следуя ответу Биджу, если вы хотите сохранить один файл с разделителем --- и не использовать отдельные файлы профиля, вы можете определить ключ spring.profiles.include следующим образом:

---
spring:
  profiles: currentProfile
  profiles.include: profileToInclude

Таким образом, это не сложная структура для анализа, и оба ключа существуют.

person Tom    schedule 06.12.2018