错误描述:renren-fast前端页面验证码刷新不出来,通过F12查看网页控制台,显示503 not service,找不到服务。
错误根因分析:我用的spring-cloud-dependencies的版本为20.0.3,spring-cloud-alibaba-dependencies的版本时2.1.0.RELEASE, 两者不兼容导致网关路由失效,即如下配置不生效。
解决方案:
更换版本:spring-cloud-dependencies的版本为3.0.3,spring-cloud-alibaba-dependencies的版本时2.2.1.RELEASE, 在工程的pom中加入如下几个依赖。
(1)首先是gulimall-common中添加注册中心和配置中心的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
(2)gulimall-common中添加springcloud-alibaba的依赖,采用2.2.1的版本,版本错了验证码会刷不出来。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
(3)gulimall-gateway中添加spring-loadbalance依赖,因为Spring Cloud 2020.0.0版本之前会自动引入Netflix Ribbon依赖,Netflix Ribbon功能跟loadbalancer一样,因Netflix公司停止维护Ribbon后, 在Spring Cloud 2020.0.0版本之后Spring使用loadbalancer替代了Ribbon, 但是loadbalancer依赖需要手动引入.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
(4)如果还刷不出来,检查一下你配置中心是否能读出配置,不行的话,gulimall-common加如下依赖,因为spring-cloud-20.0.3默认是关闭“优先读取bootstrap.properties”这个功能的。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.3</version>
</dependency>
(5)配置了以上几步之后,跨域的配置也写了,但是还是出现问题,需要更改跨域配置代码,修改如下。addAllowedMethod注释掉,添加addAllowedOriginPattern。
@Configuration
public class GulimallCorsConfiguration {
@Bean
public CorsWebFilter corsWebFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
//1、配置跨域
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
// corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedOriginPattern("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source);
}
}
踩坑心得:实在找不出bug的时候,考虑一下各种工具插件的版本问题,真的是一代版本一代神啊。