记录一下自己的第一个SpringCloud项目中遇到的bug

问题1.Param 'serviceName' is illegal, serviceName is blank
记录一下自己的第一个SpringCloud项目中遇到的bug_第1张图片

Web server failed to start. Port 8080 was already in use:

这说明 bootstrap.yml 文件并没有加载,但是我有引入下面的依赖,还是无法加载 bootstrap.yml


    org.springframework.cloud
    spring-cloud-starter-bootstrap

解决办法:在运行环境中加入:  spring.cloud.bootstrap.enabled=true  ,这样就能加载bootstrap.yml文件了
记录一下自己的第一个SpringCloud项目中遇到的bug_第2张图片

问题2.Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway
Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency
记录一下自己的第一个SpringCloud项目中遇到的bug_第3张图片

 出现这种异常的原因是因为 gateway 的web依赖和springboot的web依赖发生冲突,gateway的web依赖是 webflux ,而 springboot为 web

解决办法:移除springboot的web依赖 spring-boot-starter-web,这样就能正常启动了(放心,gateway底层的webflux也可以启动springboot项目)

问题3.Unable to find GatewayFilterFactory with name

原因是:在配置文件中filters下的 name 空着,没有写,因为我只是留了个位置,准备添加过滤器的,但是没有加上去
记录一下自己的第一个SpringCloud项目中遇到的bug_第4张图片

 解决办法:要么加上顾虑器,要么直接注释掉或删除 name

问题4.配置好gateway、nacos、sentinel,写好接口之后,测试接口的时候,你输入的url的ip和端口是你gateway的端口!!!!!!!!!!!!!!!!

如:你要访问的服务的url为:http://127.0.0.1:8080/user-service/user/addUser,而你的gateway的端口为80,那么你输入的url就为:http://127.0.0.1:80/user-service/user/addUser,所有请求都经过网关!!!!!!从而隐藏了真实的服务ip和端口

我他妈跟个傻逼一样,一眼就能看出的问题卡了一天,真他妈想给自己一巴掌!!!

问题5.Error creating bean with name 'orderListener': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'redisTemplate' is expected to be of type 'org.springframework.data.redis.core.StringRedisTemplate' but was actually of type 'org.springframework.data.redis.core.RedisTemplate'
记录一下自己的第一个SpringCloud项目中遇到的bug_第5张图片

发生这种情况的原因为:redis操作对象的,参数名错误

错误演示:
    @Resource
    private StringRedisTemplate redisTemplate;

正确演示:
    @Resource
    private StringRedisTemplate stringRedisTemplate;

真是奇葩的问题........

问题6.

feign远程调用失败,原因是调用方法的url中忘记加 baseUrl了,想给自己两巴掌,不过还好,问题不大,能解决

记录一下自己的第一个SpringCloud项目中遇到的bug_第6张图片修改之后的样子:
记录一下自己的第一个SpringCloud项目中遇到的bug_第7张图片

这个bug引发了很多莫名其妙的问题,如:程序只要启动,rocketmq消费者的监听器就会启动等问题

问题7.

公共类中自定义返回响应数据的工具类,通过下面这种方式获取不到响应对象:
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();

通过 @Resource或@Autowired 属性注入也不能获取到

原因可能是公共模块中没有启动类扫描的缘故

解决办法:在调用该工具类的方法时,传入响应对象response

问题8.定义在公共模块中的全局异常处理器,无法捕捉自己抛出的异常
原因:@SpringBootApplication 注解只能扫描其同级别的包及其子包,无法扫描父模块中的资源
解决办法:在子模块的启动类上加 @ComponentScan 注解,设置的扫描范围包括到全局异常处理器所在包,如:

@SpringBootApplication
@EnableDiscoveryClient   // 启动 nacos 客户端
@EnableFeignClients      // 启动 feign 远程调用
@ComponentScan(basePackages = {"com.zero"})  // 配置扫描的范围,要包括到全局异常处理器所在类,否则手动跑出的异常,全局异常处理器捕捉不到
public class MemberApplication {

你可能感兴趣的:(bug)