程序员的资源宝库

网站首页 > gitee 正文

【项目学习】谷粒商城学习记录1

sanyeah 2024-04-13 16:11:51 gitee 4 ℃ 0 评论

【项目学习】谷粒商城学习记录1


1、linux虚拟机安装

  • 安装VirtualBox: virtualbox安装地址
  • 安装Vagrant:Vagrant安装地址
  • Vagrant仓库:Vagrant仓库地址
  • 使用Vagrant安装centos7,并进行虚拟机网络设置:
    • 博客:virtualbox + vagrant 安装centos7 以及 vagrant up下载太慢的解决方案 _
    • 博客:virtualbox通过vagrant安装centos/7方法以及dev/sda1爆满解决方案

2、linux安装docker

  • docker仓库:docker hub 用于下载各种镜像
  • 参考博客:
    • 配置阿里云镜像加速参考:CentOS安装Docker
    • centos7安装Docker详细步骤(无坑版教程)
  • docker安装mysql:
  • docker安装redis:
    • redis Desktop Manager安装:Redis Desktop Manager(Redis可视化工具)安装及使用教程

3、开发环境配置

  • IDEA安装:-省略
  • git安装使用:-省略
  • 项目结构创建:-就是springboot cloud那些,创捷一些module,最后改一下maven仓库,改一下pom文件就行
  • 数据库初始化:谷粒商城sql 注意里面有的sql后面采用
  • 快速开发:
    • 人人开源 首先把renren-fast项目clone到我们的gulimall项目中,修改renren-fast模块为gulimall的子模块
    • 数据库运行renren-fast项目下的mysql.sql,安装相关表
    • 修改application.yml,修改数据库连接信息
    • 安装前端相关工具:nodejs。
    • 下载renren-fast-vue项目,vscode打开,运行npm install安装依赖。我的node和npm版本: (不需要完全一样,差不多就行) 如果报错可以多尝试几次,我好像用的huaweiyun的依赖库,比较nice。
    • 下载renren-generator: 这部分没什么坑
  • 整合mybatis-plus加测试:
    • @Test报错:
    • 自己加上如下依赖在pom中
      <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-api</artifactId>
          <version>5.3.2</version>
          <scope>test</scope>
      </dependency>
      
    • P18集报错:Caused by: java.lang.IllegalStateException
    • 解决参考: Application run failed——p18集做谷粒商城时遇到的测试类启动不起来,报错:Caused by: java.lang.IllegalStateException, 谷粒商城P18运行测试代码(GulimallProductApplicationTests)出现问题汇总, 谷粒商城-商品服务测试启动报错
    • 其实很多问题都是因为照着视频直接将生成的main合并到自己项目中导致的,可见这个代码生成相当差劲。你最好仔细检查下自己生成的文件,是否有合并后多了或者少了的情况。我的是Dao文件和xml文件对应不上,这主要因为我第二次只把main中的product文件夹合并了,没有重新更正xml文件。最好先将原文件夹中内容删除,再放入新内容
    • 还有个问题:在yml文件中将数据库表名后面加上?useUnicode=true&characterEncoding=utf8&useSSL=false
  • 生成一个微服务相关逆向代码步骤:
      1. 首先修改renren-generator模块中的generator.properties 文件: 修改package=com.atguigu.gulimall,moduleName=xxx(xxx表示模块名),authoremail随便写写,tablePrefix=xx_(xx_是模块xxx对应数据库表中的前缀,这样写在生成文件时可以忽略掉这些前缀)
      1. 修改application.yml中的mysql配置,将url改成jdbc:mysql://192.168.56.10:3306/gulimall_xxx?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai(xxx是当前模块名)
      1. 运行Renrenapplication.java文件,浏览器打开localhost:80端口页面,全选文件并生成代码(注意将所有文件显示在1页才能正常全选)。使用下载的生成代码中的main文件夹,替换目标模块文件夹下的main(最好先删除原main文件夹,再解压生成的文件夹到目标模块目录下,不容易出错)。
      1. IDEA中打开pom.xml文件,添加gulimall-common依赖。我由于前面的问题,还得添加junit jupiter api依赖。由于我前面是删除main再解压,所以还得手动添加上各模块下的GulimallXxxApplication.java文件。
      1. 添加resources/application.yml文件, 配置mysql信息。
      1. 运行Application文件,使用8080端口+方法调用来验证。

4、分布式组件

  • spring cloud alibaba官方文档:地址
  • 组件1:注册中心Nacos:
      1. 修改gulimall-common的pom.xml 文件,引入 Nacos Discovery Starter。
      <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
      1. docker拉一个nacos:参考地址 (最好拉nacos/nacos-server:1.1.3) . 运行后访问 ip:8848/nacos访问nacos
      1. 注册一个服务需要修改两处:
      • 在微服务配置文件中配置spring.cloud.nacos.discovery.server-addr:ip地址:8848和服务名spring.application.name:gulimall-xxx
      • 在Application.java文件添加注解@EnableDiscoveryClient,然后启动服务就行
  • 组件2:Feign 声明式远程调用:
    • 以member组件调用coupon的membercoupons()为例:
    • 全局要引入feign依赖:gulimall-common引入依赖
      <!--Feign-->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
      
    • 服务端(即被调用方法端):不需要操作,只需要实现要调用的方法就行。
      @RequestMapping("/member/list")
      public R membercoupons() {
          CouponEntity couponEntity = new CouponEntity();
          couponEntity.setCouponName("买100-10");
          return R.ok().put("coupons", Arrays.asList(couponEntity));
      }
      
    • 调用端想要调用别的服务:
      • 1.开启feign功能:Application.java添加@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")注解
      • 2.声明远程接口:(一般远程调用都放在feign包下)编写一个CouponFeignService接口,告诉SpringCloud这个接口需要调用远程服务。
        @FeignClient("gulimall-coupon")
        public interface CouponFeignService {
            //把要调用的远程方法的头部复制过来就行
            @RequestMapping("coupon/coupon/member/list")
            public R membercoupons();
        }
        
    • 测试:在任意controller中写下如下测试代码,通过调用member模块下的couponFeignService.membercoupons()远程接口方法来远程调用Coupon模块下的membercoupons()方法。
      @Autowired
      CouponFeignService couponFeignService;
      
      @RequestMapping("/coupons")
      public R test(){
          MemberEntity memberEntity = new MemberEntity();
          memberEntity.setNickname("张三");
          R membercoupons = couponFeignService.membercoupons();
      
          return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
      }
      
  • Nacos 作为配置中心: 官方地址
    • 1、全局gulimall-common导入依赖
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
       </dependency>
      
    • 2、新建bootstrap.properties文件,进行相关配置
      # 配置发现名
      spring.application.name=gulimall-coupon
      # 配置中心地址
      spring.cloud.nacos.config.server-addr=ip地址:8848
      
    • 3、为配置中心默认添加数据集(Data id) gulimall-coupon.properties,默认规则:应用名.properties。我们可以将配置添加到应用名.properties
    • 4、动态获取配置:
      • @RefreshScope: 动态获取并刷新配置
      • @Value("${配置项名称}"): 获取配置值
      • 配置中心中配置优先级 > 本地配置文件中配置
    • 5、细节
      • 命名空间:用于配置隔离,默认是public(保留空间),默认新增的配置都在public中

        • 1、开发,测试,生产:利用命名空间实现环境隔离。
          注意:要在bootstrap.properties文件中配置使用的命名空间:
          spring.cloud.nacos.config.namespace=44856f1b-4db1-438c-8c42-0d4019346b4e
          
          举例:新建三个新的命名空间,然后再prop环境中添加之前的gulimall-coupon.properties配置,并修改上面的配置文件,使用prop命名空间。重启会发现输出结果变成了prop环境下的配置信息。
        • 2、每一个微服务直接实现隔离配置: 每个微服务创建自己的命名空间,每个微服务只加载自己命名空间下的配置
      • 配置集:所有配置的集合

      • 配置集id: 类似于配置文件名, nacos中是Data id

      • 配置分组:默认所有配置集属于DEFAULT_GROUP, 相当于实现了再同一命名空间下,对同一配置文件进行不同分组的区别。同样在使用时需要在配置文件中说明使用哪个配置分组

        spring.cloud.nacos.config.group=1111
        
      • 每个微服务创建自己的命名空间,再使用配置分组区分环境

      • 同时加载多个配置集:

        • 微服务任何配置信息,任何配置文件都可以放在配置中心中
        • 只需要在bootstrp.properties中说明加载配置中心中的哪些配置文件即可
        • 以前任何springboot获取配置文件中配置注解都能用在配置中心上。

  • 组件3:Gateway网关:
    • 1、新建一个Module:gulimall-gateway, 要选择gateway服务,然后配置好pom.xml文件。
    • 2、开启服务注册发现(添加注解,配置nacos注册中心地址)
    • 3、application.yml中添加网关规则即可实现跳转
       spring:
         cloud:
           gateway:
             routes:
               - id: test_route
                 uri: https://www.baidu.com
                 predicates:
                   - Query=url, baidu
      
               - id: qq_route
                 uri: https://www.qq.com
                 predicates:
                   - Query=url, qq
      

5、前端基础

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表