系统环境:

macOS 版本 Big Sur 11.4

Intellig IDEA 版本 2021.1

DataGrip 版本 2021.1.3

Parallels Desktop 版本 16.1.2 (49151)

CentOS 版本 7

Docker 版本 20.10.7

MySql 版本 5.7

Spring Boot 版本 2.5.1

Spring Cloud 版本 2020.0.3

Spring Cloud Alibaba 版本 2.2.5.RELEASE

Nacos 版本 2.0.2


项目地址:GitHub gulimall-IamXGW


DataGrip 错误:java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost

分析:

发生这个错误的时候都是在我重开电脑以后,所以我就想重启一下虚拟机。

解决方法:

在虚拟机终端输入 reboot 命令重启虚拟机,然后在 Docker 中打开 MySql 即可。

sudo docker update redis --restart=always 这个命令是设置 MySql 开机自启。

另外,如果数据库平时能连上,但是突然不知道咋回事就连不上了。如果遇见这种情况,请检查一下你的梯子是不是开的全局连接,如果是的话,请换掉。


Mac 使用 nacos 启动不起来

解决方法:

Mac 启动 nacos 失败 日志报“nohup: /Library/Internet: No such file or directory”


Failed to parse configuration class

运行时报如下错误:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.iamxgw.gulimall.coupon.GulimallCouponApplication]; nested exception is java.io.FileNotFoundException: class path resource [com/iamxgw/gulimall/coupon/service/HomeAdvService.class] cannot be opened because it does not exist

分析:

提示 HomeAdvService.class 文件找不到。 *.class 文件应该是编译时产生的,所以直接删掉以前的 *.class 重新编译即可。

解决方法:

coupontarget 文件夹删除,重新运生成即可。

遗留问题:

为什么不删除 target 文件夹,直接运行项目不会生成缺失的 HomeAdvService.class 文件呢?


Did you forget to include spring-cloud-starter-loadbalancer?

分析:

你忘记 include spring-cloud-starter-loadbalancer 了么?

那就 include 进去。

解决方法:

在 common 的 pom.xml 中,加入依赖:

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>

使用 Nacos 时,bootstrap.properties 配置文件无效

分析:

一开始在 application.propertie 中设置 nameage,是可以正常访问到的。

但是使用 Nacos 作为配置中心却无法获取到配置中心的 nameage,而且控制台也没有同老师一样打印 located proper source,所以我怀疑是 bootstrap.properties 这个配置文件没起作用。

解决方法:

在 common 的 pom.xml 中加入依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.3</version>
</dependency>

Parameter 1 of constructor in com.baomidou.mybatisplus.autoconfigure.IdentifierGeneratorAutoConfiguration$InetUtilsAutoConfig required a bean of type ‘com.baomidou.mybatisplus.autoconfigure……..

解决方法:

如果跟老师一样,在 Java 文件中加注解 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) 是报错的。于是修改 gateway 的 pom.xml 文件,来排除不需要的依赖:

<dependency>
<groupId>com.iamxgw.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>

注意这个 <exclusions> 是新加入的。


java: You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled

解决方法:

这个问题是 Lombok 版本的问题。在 renren-fast 的 pom.xml 中修改 Lombok 版本:

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>

如果不知道这个 Lombok 版本在哪里修改,可以使用全局搜索 Lombok。

参考连接


网关 Gateway 配置 filters 重写路径 RewritePath 出问题

解决方法:

一定要根据 Gateway 的版本来查看对应的官方文档,然后按照官方文档做修改。

我是 3.0.3 版本的 Gateway RewritePath(而且 renren-fast 前面也要加个 /):

- RewritePath=/api/?(?<segment>.*), /renren-fast/$\{segment}

PS:其实不一定非要和老师的版本严格一致,你可以使用其他的版本。但重要的是,你要能自己分析出发生问题的原因是,然后逐个击破。我认为这才是真正学到了东西。