Я пытаюсь определить разные маршруты в Spring Cloud Gateway с помощью профилей Spring. Все, что я читал о том, как Spring управляет профилями, используя yaml sems, чтобы указать, что он должен работать, но, черт возьми, это просто ... не похоже. (Мои другие приложения Spring используют свойства, поэтому я не использую конфигурацию yaml - возможно, мне что-то не хватает.)
По сути, то, что я пытаюсь сделать, - это иметь профиль «prod», который содержит URI для моих рабочих серверов, и профиль «dev», который содержит эквиваленты localhost.
У меня два профиля: dev и prod. Мой application.yml
файл выглядит так
spring:
profiles:
default: prod
management:
endpoint:
health:
enabled: true
endpoints:
web:
exposure:
include: hystrix.stream, gateway
---
spring
profiles: prod
cloud:
gateway:
routes:
- id: test_route
uri: http://foo.mycompany.com
predicates:
- Path=/status
- Method=GET
---
spring
profiles: dev
cloud:
gateway:
routes:
- id: test_route
uri: http://localhost:8080
predicates:
- Path=/status
- Method=GET
Я понимаю следующее:
- свойство
spring.profiles.default
сообщает Spring, что, если профиль не указан, использовать профиль prod - Spring будет рассматривать
---
как «разделитель файлов» и повторно оценивать каждый набор свойств и перезаписывать предыдущие значения, если параметрspring.profiles
оценивает значение true
Учитывая это понимание, я ожидал, что Spring сначала проанализирует свойства "по умолчанию", узнав, что активированный профиль по умолчанию должен быть prod. Затем он проанализирует свойства продукта. Поскольку prod является активным профилем (единственный активный профиль по умолчанию), он должен анализировать и применять маршруты prod. Затем он будет анализировать маршруты разработчиков, но распознает, что dev не является активным профилем, и не перезаписывает эти значения. Это я понял из чтения документация по изменению конфигурации в зависимости от среды.
Однако, когда я загружаю это и нажимаю на конечную точку исполнительного механизма - /actuator/gateway/routes
- я возвращаюсь []
туда, где я ожидал бы увидеть маршруты prod. Я действительно вижу в своих журналах, что профиль prod активирован, но похоже, что отсутствие свойств в разделе «по умолчанию» вверху приводит к тому, что они не применяются, когда синтаксический анализатор считывает их из раздела профиля.
Еще я попробовал установить свойства «dev» как значения по умолчанию, а затем попытался использовать свойства профиля «prod» для перезаписи URI. Там произошла аналогичная проблема - я попал в конечную точку исполнительного механизма и получил обратные маршруты, но они были всего лишь разработками по умолчанию.
Как я могу использовать профили Spring для настройки различных маршрутов Spring Cloud Config в моем application.yml?
Версии:
- spring-cloud-gateway 2.0.1.BUILD-SNAPSHOT (to get a workaround for this bug, probably not relevant)
- spring-cloud-starter-gateway
- spring-boot 2.0.3.RELEASE
- spring-boot-starter-webflux
- пружина-пыльник-пускатель-привод
(Я не могу использовать Spring Cloud Config по политическим причинам. Главный архитектор моей компании серьезно пострадал от синдрома Not Invented Here.)