SpringCloud微服务项目实战(一)---搭建SpringBoot项目

目录

    • SpringBoot与SpringCloud的关系
    • 环境配置
    • 开始搭建SpringBoot项目
    • 问题总结

SpringBoot与SpringCloud的关系

  1. Spring Boot主内,能够快速搭建,快速开发单个微服务,搞定了数据层访问、RESTful 接口、日志组件、内置容器等等基础功能
  2. Spring Cloud主外,轻松实现服务注册与发现、负载均衡、熔断降级、配置管理等
  3. Spring Boot是SpringCloud的基础,两者分工合作、合二为一,构建了微服务领域的全家桶解决方案

环境配置

  1. 安装java,推荐使用 JDK8 最新小版本或者 OpenJDK16 的最新小版本
  2. 安装maven,推荐使用 Maven 3.6 或以上的版本
  3. 下载IntelliJ IDEA
  4. 在IntelliJ IDEA 中安装 Lombok(File-Settings-Plugins-搜索Lombok)
  5. 安装MySQL数据库,MySQL官网
  6. 下载DB可视化工具DataGrip(navicat、workbench亦可),DataGrip官网,DataGrip使用教程
  7. 安装Rabbit MQ,RabbitMQ官网,RabbitMQ安装使用教程, 解决ERROR: distribution port 25672 in use by another node: rabbit@
  8. 安装Redis,Redis安装教程

开始搭建SpringBoot项目

先看一下整体效果和模块
SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第1张图片
做个解释,分了三个模块:
① coupon_template_serv 优惠券模板服务,用来创建、查找优惠券
② coupon_calculation_serv 优惠计算服务,根据用户的商品和优惠券来计算订单优惠后的金额
③ coupon_customer_serv 用户拂去,用来领券、下单,也是对用户开放的接口,依赖前两个服务来完成

这里详细记录一下coupon_template_serv这个模块的搭建过程,其他两个类似

1. 新建项目
SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第2张图片
SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第3张图片
SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第4张图片
SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第5张图片
将新建后多余的文件全部删除,只剩下这三个即可
SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第6张图片

2. 新建Module
方法与步骤一相同,新建后同样将多余的删除,因为还要建子模块,所以父模块下除了xxx.iml和xxx.pom也都删掉。
在coupon-template-serv下建3个子模块分别是api(存放公共 POJO 类或者对外接口)、dao(存放数据库实体类和 Dao 层)、impl(核心业务逻辑的实现层,对外提供 REST API),如下图
SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第7张图片

  1. 添加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和子模块

  1. 依次搭建子模块
    template-api,template-dao,template-impl,代码参考

  2. 创建启动类
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第8张图片

  3. 创建配置文件 application.yml
    它位于 src/main/resources 文件夹下。需要指定端口号、数据源等等配置

  4. 启动项目
    运行Application,控制台可查看启动日志

  5. 调用接口
    postman中访问 localhost:端口号/url,即可通过controlle层r寻址-service层处理-dao层访问数据库简单完成整个闭环

问题总结

  1. 问题:新建子模块后,pom文件的图标是xml文件标识,而不是m标识,而且目录结构是com-xxx-xxx这样一层一层的,而不是package包名一起的
    解决:idea工作台左侧右键pom文件,点击Add As Maven Project,如下图
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第9张图片

  2. 问题:删除子模块后,再新增同样名称的子模块,pom文件不生效且出现了删除线。
    解决:File–Settings–Build–Maven–IgnoredFiles中将对勾取消,如下图
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第10张图片

  3. 问题:子模块下再加子模块后,没有出现新的模块名,且目录层级乱了,把上级模块的pom也覆盖了。
    解决:添加Module选择的是Spring Initializr类型时,再最后一步存储位置设置中的Content root和Module_file location要加上子模块名称,如下图(也有人说添加module时选择maven类型,但这样的话在src-java下就没有默认Application类创建了)
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第11张图片

  4. 问题:@Table(name = “coupon_template”)中提示Cannot resolve table ‘coupon_template’
    解决:Idea连接数据库,并在报错处指定数据源
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第12张图片
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第13张图片
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第14张图片
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第15张图片

  5. 问题:Nacicat连接本地数据库,出现1251错误client does not support authentication protocol requested by server
    解决:参考这里

  6. 问题:SpringBoot项目启动成功,但使用postman调接口时报404
    分析:找不到路径,controller未生效。
    解决:将com.local.coupon.template.templateimpl改为com.local.coupon.template。SpringBoot会扫描到com.local.coupon.template包及其子包下面的内容,扫描路径也无需指定(即可以去掉@ComponentScan注解)
    SpringCloud微服务项目实战(一)---搭建SpringBoot项目_第16张图片

你可能感兴趣的:(java,spring,cloud,微服务,spring,boot)