Я пытаюсь включить приложение 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 несовместима с Gateway; Gateway - это приложение Netty и spring-boot-starter-web использует tomcat / servlets. При попытке исключить spring-boot-starter-web
из модуля cloud-config-server приложение снова завершается с ошибкой w /:
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