Spring Cloud Gateway启动报错找不到header的RoutePredicateFactory如何解决?
问题诱因
- 核心原因是Spring Cloud Gateway的路由断言工厂名称严格区分大小写,你在application.properties中配置断言时使用了小写的
header,而框架内置的Header路由断言工厂的命名规则为HeaderRoutePredicateFactory,框架会自动将你配置的断言名称拼接RoutePredicateFactory后缀作为Bean名称查找,小写header拼接后得到的headerRoutePredicateFactory不存在于Spring容器中,因此抛出找不到对应工厂的异常。 - 启动报错中提到的
eurekaAutoServiceRegistration启动失败只是连锁表象:网关路由校验失败导致Spring上下文初始化中断,连带Eureka服务注册相关的Bean无法正常启动。
解决方法
修改application.properties中的Header断言配置,将小写的header首字母改为大写即可:
原来的错误配置:
spring.cloud.gateway.routes[0].predicates[2]=header=Authorization, Bearer (.*)
修改后的正确配置:
spring.cloud.gateway.routes[0].predicates[2]=Header=Authorization, Bearer (.*)
修改完成后重新启动项目即可正常初始化网关路由、完成Eureka注册。
补充说明:Spring Cloud Gateway所有内置断言、过滤器的配置名称都遵循首字母大写的驼峰命名规则,比如
Path、Method、RewritePath等,配置时注意大小写一致即可避免同类问题。
内容的提问来源于stack exchange,提问作者PAA
相关产品推荐
相关产品推荐

