可以将Spring Cloud Gateway应用程序启用为云配置服务器吗?

时间:2018-09-26 23:18:00

标签: spring-cloud spring-cloud-config spring-cloud-gateway

我正在尝试启用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

将任何启动应用程序嵌入到配置服务器中

但是,当尝试在网关的build.gradle中引入spring-cloud-config-server模块时,在启动时遇到以下错误:

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)看来,出现上述问题是因为s​​pring-boot-starter-web与Gateway不兼容;网关是一个Netty应用程序,spring-boot-starter-web使用tomcat / servlet。尝试从cloud-config-server模块中排除spring-boot-starter-web时,应用程序再次失败:

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

1 个答案:

答案 0 :(得分:0)

他们不能。配置服务器基于spring MVC(servlet),网关基于spring webflux和Netty。它们不兼容,不能一起运行。