目录
- SpringBoot与SpringCloud的关系
- 环境配置
- 开始搭建SpringBoot项目
- 问题总结
SpringBoot与SpringCloud的关系
- Spring Boot主内,能够快速搭建,快速开发单个微服务,搞定了数据层访问、RESTful 接口、日志组件、内置容器等等基础功能
- Spring Cloud主外,轻松实现服务注册与发现、负载均衡、熔断降级、配置管理等
- Spring Boot是SpringCloud的基础,两者分工合作、合二为一,构建了微服务领域的全家桶解决方案
环境配置
- 安装java,推荐使用 JDK8 最新小版本或者 OpenJDK16 的最新小版本
- 安装maven,推荐使用 Maven 3.6 或以上的版本
- 下载IntelliJ IDEA
- 在IntelliJ IDEA 中安装 Lombok(File-Settings-Plugins-搜索Lombok)
- 安装MySQL数据库,MySQL官网
- 下载DB可视化工具DataGrip(navicat、workbench亦可),DataGrip官网,DataGrip使用教程
- 安装Rabbit MQ,RabbitMQ官网,RabbitMQ安装使用教程, 解决ERROR: distribution port 25672 in use by another node: rabbit@
- 安装Redis,Redis安装教程
开始搭建SpringBoot项目
先看一下整体效果和模块
做个解释,分了三个模块:
① coupon_template_serv 优惠券模板服务,用来创建、查找优惠券
② coupon_calculation_serv 优惠计算服务,根据用户的商品和优惠券来计算订单优惠后的金额
③ coupon_customer_serv 用户拂去,用来领券、下单,也是对用户开放的接口,依赖前两个服务来完成
这里详细记录一下coupon_template_serv这个模块的搭建过程,其他两个类似
1. 新建项目
将新建后多余的文件全部删除,只剩下这三个即可
2. 新建Module
方法与步骤一相同,新建后同样将多余的删除,因为还要建子模块,所以父模块下除了xxx.iml和xxx.pom也都删掉。
在coupon-template-serv下建3个子模块分别是api(存放公共 POJO 类或者对外接口)、dao(存放数据库实体类和 Dao 层)、impl(核心业务逻辑的实现层,对外提供 REST API),如下图
- 添加maven依赖
从上到下,先修改最外层的项目的pom.xml
<!--指定父级依赖 spring-boot-starter-parent 里定义的 Spring Boot 组件版本信息就会被自动带到子模块中 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
</parent>
<!--maven 的打包类型有三种:jar、war 和 pom。当我们指定 packaging 类型为 pom 时,意味着当前模块是一个“boss”-->
<packaging>pom</packaging>
<!-- 指定子模块 -->
<modules>
<module>coupon-template-serv</module>
<module>coupon-calculation-serv</module>
<module>coupon-customer-serv</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<!--省略部分依赖项 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
</dependencyManagement>
`
再依次修改coupon-template-serv,template-api,template-dao,template-impl的依赖项,其中需要指定各自的parent和子模块
-
依次搭建子模块
template-api,template-dao,template-impl,代码参考 -
创建启动类
-
创建配置文件 application.yml
它位于 src/main/resources 文件夹下。需要指定端口号、数据源等等配置 -
启动项目
运行Application,控制台可查看启动日志 -
调用接口
postman中访问 localhost:端口号/url,即可通过controlle层r寻址-service层处理-dao层访问数据库简单完成整个闭环
问题总结
-
问题:新建子模块后,pom文件的图标是xml文件标识,而不是m标识,而且目录结构是com-xxx-xxx这样一层一层的,而不是package包名一起的
解决:idea工作台左侧右键pom文件,点击Add As Maven Project,如下图
-
问题:删除子模块后,再新增同样名称的子模块,pom文件不生效且出现了删除线。
解决:File–Settings–Build–Maven–IgnoredFiles中将对勾取消,如下图
-
问题:子模块下再加子模块后,没有出现新的模块名,且目录层级乱了,把上级模块的pom也覆盖了。
解决:添加Module选择的是Spring Initializr类型时,再最后一步存储位置设置中的Content root和Module_file location要加上子模块名称,如下图(也有人说添加module时选择maven类型,但这样的话在src-java下就没有默认Application类创建了)
-
问题:@Table(name = “coupon_template”)中提示Cannot resolve table ‘coupon_template’
解决:Idea连接数据库,并在报错处指定数据源
-
问题:Nacicat连接本地数据库,出现1251错误client does not support authentication protocol requested by server
解决:参考这里 -
问题:SpringBoot项目启动成功,但使用postman调接口时报404
分析:找不到路径,controller未生效。
解决:将com.local.coupon.template.templateimpl改为com.local.coupon.template。SpringBoot会扫描到com.local.coupon.template包及其子包下面的内容,扫描路径也无需指定(即可以去掉@ComponentScan注解)