1、创建一个springboot项目,依赖如下,springboot版本用的3.1.2
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.4</version>
</dependency>
application.yml配置如下
server:
port: 8088
spring:
cloud:
gateway:
routes:
-id: demo
uri: https://blog.csdn.net
predicates:
- Path=/demo/**
filters:
- StripPrefix=1
但是配置中routes下的id、uri等都提示Cannot resolve configuration property
启动不报错,但是网关并没有转发请求,意味着网关配置没生效
折腾良久后,依然不行,既然yml配置不行,我改用代码配置
新建配置类
@Configuration
public class GateWayConfig {
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder){
return builder.routes()
//id 表示被转发到uri地址的id名,
.route("id",p -> p
.path("/csdn/**")
.filters(f -> f.stripPrefix(1))
.uri("https://blog.csdn.net"))
.build();
}
}
糟糕,启动报错:
又折腾良久,怀疑是版本问题,那么,降版本
我把springboot和网关都降到2.2.5.RELEASE
启动正常
调用接口,成功访问
那么代码应该没有问题,把代码配置去掉,用yml配置方式看看行不行,
发现不行
总结:
1、yml配置无法加载问题
折中解决:(有时间再看看为什么yml会无法加载网关的配置,服务端口配置加载正常)
将yml替换成properties格式后,网关正常
spring.cloud.gateway.routes[0].id=demo
spring.cloud.gateway.routes[0].uri=https://blog.csdn.net
spring.cloud.gateway.routes[0].predicates[0]=Path=/demo/**
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
server.port=8088
已解决:很2,yml写法有问题,说明对配置还是不熟啊
自行对比和上面的区别
server:
port: 8088
spring:
cloud:
gateway:
routes:
- id: demo
uri: https://blog.csdn.net
predicates:
- Path=/demo/**
filters:
- StripPrefix=1
2、3.x版本无法自动装配RouteLocatorBuilder问题
解决:
是springboot版本和springcloud版本不对应问题
最新的网关版本是4.0.3,但是适配的springboot最高版本才是3.0.X,因此我把springboot版本降成3.0.6,spring-cloud-starter-gateway版本生成4.0.3,代码配置网关的方式就正常了。