【项目学习】谷粒商城学习记录1
【项目学习】谷粒商城学习记录1
1、linux虚拟机安装
- 安装VirtualBox: virtualbox安装地址
- 安装Vagrant:Vagrant安装地址
- Vagrant仓库:Vagrant仓库地址
- 使用Vagrant安装centos7,并进行虚拟机网络设置:
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
- 生成一个微服务相关逆向代码步骤:
-
- 首先修改renren-generator模块中的generator.properties 文件: 修改
package=com.atguigu.gulimall
,moduleName=xxx
(xxx表示模块名),author
和email
随便写写,tablePrefix=xx_
(xx_是模块xxx对应数据库表中的前缀,这样写在生成文件时可以忽略掉这些前缀)
- 首先修改renren-generator模块中的generator.properties 文件: 修改
-
- 修改application.yml中的mysql配置,将
url
改成jdbc:mysql://192.168.56.10:3306/gulimall_xxx?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
(xxx是当前模块名)
- 修改application.yml中的mysql配置,将
-
- 运行Renrenapplication.java文件,浏览器打开localhost:80端口页面,全选文件并生成代码(注意将所有文件显示在1页才能正常全选)。使用下载的生成代码中的main文件夹,替换目标模块文件夹下的main(最好先删除原main文件夹,再解压生成的文件夹到目标模块目录下,不容易出错)。
-
- IDEA中打开pom.xml文件,添加
gulimall-common
依赖。我由于前面的问题,还得添加junit jupiter api
依赖。由于我前面是删除main再解压,所以还得手动添加上各模块下的GulimallXxxApplication.java文件。
- IDEA中打开pom.xml文件,添加
-
- 添加resources/application.yml文件, 配置mysql信息。
-
- 运行Application文件,使用8080端口+方法调用来验证。
-
4、分布式组件
- spring cloud alibaba官方文档:地址
- 组件1:注册中心Nacos:
-
- 修改gulimall-common的pom.xml 文件,引入 Nacos Discovery Starter。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
- docker拉一个nacos:参考地址 (最好拉
nacos/nacos-server:1.1.3
) . 运行后访问ip:8848/nacos
访问nacos
- docker拉一个nacos:参考地址 (最好拉
-
- 注册一个服务需要修改两处:
- 在微服务配置文件中配置
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(); }
- 1.开启feign功能:Application.java添加
- 测试:在任意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文件中配置使用的命名空间:
举例:新建三个新的命名空间,然后再prop环境中添加之前的gulimall-coupon.properties配置,并修改上面的配置文件,使用prop命名空间。重启会发现输出结果变成了prop环境下的配置信息。spring.cloud.nacos.config.namespace=44856f1b-4db1-438c-8c42-0d4019346b4e
- 2、每一个微服务直接实现隔离配置: 每个微服务创建自己的命名空间,每个微服务只加载自己命名空间下的配置
- 1、开发,测试,生产:利用命名空间实现环境隔离。
-
配置集:所有配置的集合
-
配置集id: 类似于配置文件名, nacos中是
Data id
-
配置分组:默认所有配置集属于
DEFAULT_GROUP
, 相当于实现了再同一命名空间下,对同一配置文件进行不同分组的区别。同样在使用时需要在配置文件中说明使用哪个配置分组spring.cloud.nacos.config.group=1111
-
每个微服务创建自己的命名空间,再使用配置分组区分环境
-
同时加载多个配置集:
- 微服务任何配置信息,任何配置文件都可以放在配置中心中
- 只需要在bootstrp.properties中说明加载配置中心中的哪些配置文件即可
- 以前任何springboot获取配置文件中配置注解都能用在配置中心上。
-
- 1、全局gulimall-common导入依赖
- 组件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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)