一、辨析springboot与springcloud与springcloudalibaba
SpringBoot:这个大家经常使用应该明白, SpringCloud:cloud工程基于boot实现 SpringCloudAlibaba:基于SpringCloud实现
其实就是套娃关系,但是引入SpringCloud之后无需再次引入SpringBoot,而引入SpringCloudAlibaba一定需要引入SpringCloud,注意三者之间的版本关系,这里互联网上有许多,自行查看
SpringCloud的设计理念与SpringBoot是不一样的
springboot的设计理念是提供一种快速、轻松地构建独立、可执行的、生产级别的 Spring 应用程序的方式。Spring Boot 集成了大量的默认配置和开箱即用的功能,旨在减少开发者配置和繁琐的设置。
Spring Cloud 是用于构建分布式系统和微服务架构的项目。它的设计理念是提供一套工具和组件,以解决构建和管理分布式系统的挑战。Spring Cloud 在 Spring Boot 基础之上构建,旨在使开发者能够更轻松地构建和管理分布式架构。
二、maven的一些介绍
先介绍几个maven标签
- modules:用于添加子模块
- properties:自定义版本信息
- dependencyManagement:依赖管理,只是做声明,不会真的引入依赖
三种版本管理方式
- 在properties中定义版本号,子模块使用${}引入即可
- 在dependencyManagement中声明依赖信息,子模块直接引入,不需要写版本号
- 在properties定义版本,在dependencyManagement中声明,最后在子模块引入
笔者的一些最佳实践
- 所有的依赖都在父模块中使用properties定义,便于统一管理
- 只有所有模块都依赖的组件才在dependencyManagement中声明
- 可以在dependencyManagement中声明自己的核心模块
三、踩坑点
1. mysql-connector-java
在boot项目中是有默认的版本号的,但是在cloud中没有,因为不同的服务使用的版本可能是不一样的,所以需要显示声明版本号,否则会找不到依赖
2. 最好使用上文的最佳实践
笔者在这块出了许多问题,但是只要按照上文三条规则来即可避免,也是踩的最多的坑
3. springcloud
在cloud中是不需要引入bootstart的,但是一定要引入spring-cloud-starter-bootstrap
4. nacos连接失败
- 检查版本问题,读者采用若依微服务版本,不可能有错
- 检查9848喝9849端口,新版本需要使用这两个
- 修改cloudalibaba版本 发现是9849拒绝连接 但是检查发现端口没有被占用
- 询问chatgpt
- 佛系重启
- 重启nacos,查看nacos配置
- 摆烂几个小时之后发现是nacos客户端版本问题
- 迅速去github找到nacos升级
- 启动连接成功