Я пытаюсь включить приложение Spring Cloud Gateway для автоматического обновления yml конфигурации маршрутизации на лету. Мне удалось настроить сервер Cloud Config для размещения маршрута YAML и включить Spring Cloud Gateway для автоматического обновления его конфигурации с помощью @Scheduled
contextRefresher.refresh()
использования. Однако для этого требуются два запущенных приложения, и мы хотим минимизировать количество дополнительных серверов, необходимых для поддержки этого требования.
Документация по Spring Cloud Config Server предполагает, что любое загрузочное приложение может быть встроено в сервер конфигурации с помощью аннотации @EnableConfigServer
: https://cloud.spring.io/spring-cloud-static/spring-cloud.html#_spring_cloud_config_server
Однако при попытке ввести модуль spring-cloud-config-server
в build.gradle моего шлюза я столкнулся со следующей ошибкой при запуске:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.http.codec.ServerCodecConfigurer' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Из обсуждения здесь (https://github.com/spring-cloud/spring-cloud-gateway/issues/319) похоже, что проблема выше возникает из-за того, что spring-boot-starter-web несовместима со шлюзом; Шлюз - это приложение Netty, а spring-boot-starter-web использует tomcat / servlets. При попытке исключить spring-boot-starter-web
из модуля cloud-config-server приложение снова терпит неудачу с:
onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.cloud.config.server.config.ConfigServerAutoConfiguration]; nested exception is java.io.FileNotFoundException: class path resource [org/springframework/web/servlet/config/annotation/WebMvcConfigurerAdapter.class] cannot be opened because it does not exist
Может быть, приложение Spring Cloud Gateway нельзя включить в качестве сервера CloudConfig? Или я что-то упускаю. FWIW моя версия sprincCloudVersion Finchley.SR1