【SpringCloud微服务项目学习-mall4cloud项目(1)】——环境部署,构建与运行

环境部署,构建与运行

  • mall4cloud项目介绍
    • 源码地址
  • 开发环境搭建
  • pom搭建
  • 项目运行
  • 前端运行

mall4cloud项目介绍

  • mall4j商城系统
    首先介绍一下mall4j,是一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的完全开源商城。
  • mall4cloud商城系统
    mall4cloud是mall4j的微服务架构。具有微服务架构,分布式部署,静态化分离,高性能高并发,支持负载均衡,支持多端开发特点

商城是基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统,采用主流的互联网技术架构、全新的UI设计、支持集群部署、服务注册和发现以及拥有完整的订单流程等,代码完全开源,没有任何二次封装,是一个非常适合二次开发的电商平台系统。

商城致力于为中大型企业打造一个功能完整、易于维护的微服务B2B2C电商商城系统,采用主流微服务技术实现。后台管理系统包含平台管理,店铺管理、商品管理、订单管理、规格管理、权限管理、资源管理等模块。

在这里插入图片描述
因最近将项目的环境部署并运行了一下,通过阅读源码,发现是一个很完整的springcloud项目。现在通过笔记方式再次记录一下,学习其中的微服务架构设计和B2B2C电商商城系统的一些解决方案。

源码地址

因官方源码使用的是jdk17,和自己平时用的jdk11和1.8有些区别,就将项目的jdk环境还原到了1.8版本
github:

https://github.com/cjy-chenjy/mall4cloud-cjy
fork自https://github.com/gz-yami/mall4cloud
gitee:
https://gitee.com/cjy7007/mall4cloud
fork自https://gitee.com/gz-yami/mall4cloud

从上述地址可以pull源码,且md文件中有具体的介绍,就不照搬了
在这里插入图片描述

开发环境搭建

github的文档中详细给了开发文档和环境搭建视频,且环境通过docker-compse比较方便。对于环境搭建做以下补充:
1、关于中间件使用的服务器:

服务器建议新开一个虚拟机,因项目的数据库和一些环境都是重新通过docker搭建,可能会和已使用过的端口冲突。配置建议内存4核6g以上,因为项目的中间件启动还是需要占用较多内存
或者使用一台云服务器,毕竟任何时候都可以连接。配置也需要至少选择2核4g,作者就是这样的一台服务器,但是启动一些中间件还是比较费劲😂。就像rocketMQ没有启动dashboard,es没有启动kibana等,只启动了一些主要服务。

2、docker-compse文件介绍
根据视频可以完整的将docker-compse环境搭建起来,对文档中的一些内容增加注释如下:

version: "3.5"services:mall4cloud-mysql:image: mysql:8.0container_name: mall4cloud-mysqlrestart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=root # 设置MySQL的root用户密码ports:- 3306:3306 # 映射容器内部3306端口到宿主机的3306端口volumes:- ./mysql/data:/var/lib/mysql # 将宿主机的目录挂载到容器的/var/lib/mysql目录- ./mysql/conf.d:/etc/mysql/conf.d # 将宿主机的目录挂载到容器的/etc/mysql/conf.d目录- ./mysql/initdb:/docker-entrypoint-initdb.d # 将宿主机的目录挂载到容器的/docker-entrypoint-initdb.d目录mall4cloud-minio:image: minio/minio:RELEASE.2021-06-17T00-10-46Zcontainer_name: mall4cloud-miniorestart: alwayscommand: server /data # 启动MinIO服务器并指定数据目录ports:- 9000:9000 # 映射容器内部9000端口到宿主机的9000端口volumes:- ./minio/data:/data # 将宿主机的目录挂载到容器的/data目录environment:- MINIO_ROOT_USER=admin # 设置MinIO的管理员用户名- MINIO_ROOT_PASSWORD=admin123456 # 设置MinIO的管理员密码mall4cloud-redis:image: redis:6.2container_name: mall4cloud-redisrestart: alwaysports:- 6379:6379 # 映射容器内部6379端口到宿主机的6379端口mall4cloud-nacos:image: nacos/nacos-server:v2.2.0-slimcontainer_name: mall4cloud-nacosrestart: alwaysdepends_on:- mall4cloud-mysql # 确保在启动前依赖于MySQL服务ports:- 8848:8848 # 映射容器内部8848端口到宿主机的8848端口- 9848:9848- 9849:9849environment:- JVM_XMS=256m # 配置JVM的最小内存分配- JVM_XMX=256m # 配置JVM的最大内存分配- MODE=standalone # 设置Nacos运行模式为独立模式- PREFER_HOST_MODE=hostname- SPRING_DATASOURCE_PLATFORM=mysql- MYSQL_SERVICE_HOST=192.168.1.46 # MySQL数据库的主机地址- MYSQL_SERVICE_DB_NAME=mall4cloud_nacos # Nacos使用的数据库名- MYSQL_SERVICE_USER=root # 连接MySQL的用户名- MYSQL_SERVICE_PASSWORD=root # 连接MySQL的密码volumes:- ./nacos/logs:/home/nacos/logs # 将宿主机的目录挂载到容器的日志目录mall4cloud-seata:image: seataio/seata-server:1.6.1container_name: mall4cloud-seatarestart: alwaysdepends_on:- mall4cloud-mysql- mall4cloud-nacosports:- 8091:8091 # 映射容器内部8091端口到宿主机的8091端口- 7091:7091environment:- SEATA_IP=192.168.1.46 # Seata服务器IP地址volumes:- ./seata/application.yml:/seata-server/resources/application.yml # 将宿主机的配置文件挂载到Seata容器mall4cloud-elasticsearch:image: elasticsearch:7.17.5container_name: mall4cloud-elasticsearchrestart: alwaysports:- 9200:9200 # 映射容器内部9200端口到宿主机的9200端口- 9300:9300environment:- discovery.type=single-node # 设置Elasticsearch为单节点模式- ES_JAVA_OPTS=-Xms512m -Xmx512m # 配置JVM堆内存volumes:- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 挂载配置文件- ./elasticsearch/data:/usr/share/elasticsearch/data # 挂载数据目录- ./elasticsearch/plugins:/usr/share/elasticsearch/plugins # 挂载插件目录mall4cloud-kibana:image: kibana:7.17.5container_name: mall4cloud-kibanarestart: alwaysports:- 5601:5601 # 映射容器内部5601端口到宿主机的5601端口links:- mall4cloud-elasticsearch:elasticsearch # 与Elasticsearch容器建立链接depends_on:- mall4cloud-elasticsearch # 确保在启动前依赖于Elasticsearchmall4cloud-canal:image: canal/canal-server:v1.1.6container_name: mall4cloud-canalrestart: alwaysports:- 11111:11111 # 映射容器内部11111端口到宿主机的11111端口volumes:- ./canal/conf/example:/home/admin/canal-server/conf/example # 挂载配置文件- ./canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties # 挂载配置文件- ./canal/logs:/home/admin/canal-server/logs # 挂载日志目录mall4cloud-rocketmq-namesrv:image: apache/rocketmq:4.9.4container_name: mall4cloud-rocketmq-namesrvrestart: alwaysports:- 9876:9876 # 映射容器内部9876端口到宿主机的9876端口volumes:- ./rocketmq/namesrv/logs:/home/rocketmq/logs # 挂载日志目录- ./rocketmq/namesrv/store:/home/rocketmq/store # 挂载存储目录environment:JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128M" # 配置Java参数command: ["sh","mqnamesrv"] # 启动命令networks:rocketmq:aliases:- mall4cloud-rocketmq-namesrvmall4cloud-rocketmq-broker:image: apache/rocketmq:4.9.4container_name: mall4cloud-rocketmq-brokerrestart: alwaysports:- 10909:10909 # 映射容器内部10909端口到宿主机的10909端口- 10911:10911volumes:- ./rocketmq/broker/logs:/home/rocketmq/logs # 挂载日志目录- ./rocketmq/broker/store:/home/rocketmq/store # 挂载存储目录- ./rocketmq/broker/conf/broker.conf:/etc/rocketmq/broker.conf # 挂载配置文件environment:JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128M -XX:-AssumeMP" # 配置Java参数command: ["sh","mqbroker","-c","/etc/rocketmq/broker.conf","-n","mall4cloud-rocketmq-namesrv:9876","autoCreateTopicEnable=true"] # 启动命令depends_on:- mall4cloud-rocketmq-namesrv # 确保在启动前依赖于RocketMQ Namesrvnetworks:rocketmq:aliases:- mall4cloud-rocketmq-brokermall4cloud-rocketmq-dashboard:image: apacherocketmq/rocketmq-dashboard:1.0.0container_name: mall4cloud-rocketmq-dashboardrestart: alwaysports:- 8180:8080 # 映射容器内部8080端口到宿主机的8180端口environment:JAVA_OPTS: "-Drocketmq.namesrv.addr=mall4cloud-rocketmq-namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" # 配置Java参数depends_on:- mall4cloud-rocketmq-namesrv # 确保在启动前依赖于RocketMQ Namesrvnetworks:rocketmq:aliases:- mall4cloud-rocketmq-console# 定义自定义网络
networks:rocketmq:name: rocketmqdriver: bridge

3、es的模板建立
如果使用es-head,则使用如下命令

http://127.0.0.1:9200/_template/product/
使用kibana的话根据视频正常建立即可

4、后端代码通过idea打开后没有services管理
正常来说,启动项目后右下角会提示是否要打开services窗口,点击同意即可,如果未提示,看这篇文章的解决方法

https://blog.csdn.net/weixin_45764765/article/details/124794766

pom搭建

看一下项目的父pom文件内容
在这里插入图片描述
①:指定项目的gav坐标
②:指定项目的模块依赖,可以看到有14个模块,后面一一介绍
③④:项目的具体配置,可以看到使用了jdk1.8版本,这个也要和maven的conf下的seeting.xml版本保持一致,且和idea的jdk环境保持一致,下图中打开的内容。
在这里插入图片描述
继续看下面的配置
在这里插入图片描述
①②③:springboot、springCloud、springCloudAlibaba三者的版本号,这个版本有具体的对应关系。如下图,具体版本详细对照:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
在这里插入图片描述
④可以修改版本的两个依赖
⑤一些依赖的版本管理,中间件的版本对照也可以看这个,就不一一列举了

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

继续看
在这里插入图片描述

①②③:元素是用于集中管理项目中所有依赖库的版本号的部分。但不会直接引入这些依赖。也就是这部分只是做gav坐标的管理。方便后续各个模块直接引入

在这里插入图片描述
①②:这里是表示这个spring-boot-configuration-processor是可选的,也是没有引入,如需引入需指定具体版本
③~⑥等后续:

  • <build标签>:包含了 Maven 构建过程的配置信息
  • < finalName>用于指定项目构建生成的最终产物(通常是 JAR 文件、WAR 文件等)的名称
  • spring-boot-maven-plugin:将 Spring Boot 项目打包成自包含的可执行 JAR 文件,其中包含了应用程序的代码和所有依赖项
  • < plugin>:用于编译 Java 代码和处理资源文件
  • < resources>: src/main/resources在构建过程中会被过滤

项目运行

后台项目启动这五个是必须启动的
在这里插入图片描述
由上到下依次是

  • 授权登录模块
  • 业务模块
  • 网关模块
  • 基于美团leaf的生成id服务
  • 用户角色权限模块

前端运行

这个可以直接参考视频运行即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/110319.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库开发-MySQL基础DQL和多表设计

1. 数据库操作-DQL DQL英文全称是Data Query Language(数据查询语言)&#xff0c;用来查询数据库表中的记录。 1.1 介绍 查询关键字&#xff1a;SELECT 查询操作是所有SQL语句当中最为常见&#xff0c;也是最为重要的操作。在一个正常的业务系统中&#xff0c;查询操作的使…

怎么实现一个登录时需要输入验证码的功能

最近给项目换了一个登录页面&#xff0c;而这个登录页面设计了验证码&#xff0c;于是想着把这个验证码功能实现一下吧。 这篇文章就如何实现登录时的验证码验证功能进行详细地介绍。 目录 页面效果 实现思路 生成验证码的控制器类 前端页面代码 后端登录代码 UserLoginD…

JL-A/41 JL-A/42 JL-A/43 集成电路电流继电器 过负荷或短路 JOSEF约瑟

JL-A、B集成电路电流继电器 JL-A/11 JL-A/31 JL-A/12 JL-A/32 JL-A/13 JL-A/33 JL-A/21 JL-A/22 JL-A/23 JL-A/34 JL-A/35 JL-B/41 JL-A/42 JL-B/43 JL-B/11 JL-B/31 JL-B/12 JL-B/32 JL-B/13 JL-B/33 JL-B/21 JL-B/22 JL-B/23 JL-B/34 JL-B/35 JL-B/41 JL-B/42 …

[NLP] LLM---<训练中文LLama2(一)>训练一个中文LLama2的步骤

一 数据集 【Awesome-Chinese-LLM中文数据集】 【awesome-instruction-dataset】【awesome-instruction-datasets】【LLaMA-Efficient-Tuning-数据集】Wiki中文百科&#xff08;25w词条&#xff09;wikipedia-cn-20230720-filteredBaiduBaiKe&#xff08;563w词条&#xff09; …

linux内核分析:进程与调度

lec12, 13, 14 : 进程数据结构 实际上进程和线程都是有一个统一的内部结构------task_struct 这是因为,上面的进程和线程到了内核这里,统一变成了任务,这就带来两个问题:信息展示和命令下达(有的是进程,有的是线程下达) pid 是 process id,tgid 是 thread group ID …

Python模块之time中时间戳、时间字符与时间元组之间的相互转换

时间的三种形式 时间戳&#xff0c;根据1970年1月1日00:00:00开始按秒计算的偏移量。 1694868399 时间格式字符串&#xff0c;字符串形式的时间。 2023-09-16 20:46:39 时间元组&#xff08;struct_time&#xff09;&#xff0c;包含9个元素。 time.struct_time(tm_year2023, …

026-从零搭建微服务-文件服务(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

【C++】使用红黑树进行封装map和set

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

Python Opencv实践 - 视频文件操作

参考资料&#xff1a; 视频处理VideoCapture类---OpenCV-Python开发指南&#xff08;38&#xff09;_python opencv videocapture_李元静的博客-CSDN博客 OpenCV VideoCapture.get()参数详解 - 简书FOURCC四字符码对照表_4fvcc_Kellybook的博客-CSDN博客 import cv2 as cv im…

02目标检测-传统检测方法

目录 一、目标学习的检测方法变迁及对比 二、 基于传统手工特征的检测算法的定义 三、传统主要手工特征与算法 Haar特征与 人脸检测算法 - Viola-Jones(了解) HOG特征与 SVM 算法(了解)&#xff08;行人检测、opencv实现&#xff09; SIFT特征与SIFT算法(了解) DPM&#…

Python中异常处理4-4

在Python中的异常处理4-1_棉猴的博客-CSDN博客中提到&#xff0c;在try块中的代码运行时如果出现异常&#xff0c;会自动抛出这个异常。可以通过raise语句手动抛出异常。 1 raise语句手动抛出异常 raise后面跟要抛出的异常类或者异常类的实例&#xff0c;表示手动抛出该异常&…

看好多人都在劝退学计算机,可是张雪峰又 推荐过计算机,所以计算机到底是什么样 的?

张雪峰高考四百多分&#xff0c;但是他现在就瞧不起400多分的学生。说难听点&#xff0c;六七百分的 热门专业随便报谁不会啊&#xff1f; 计算机专业全世界都是过剩的&#xff0c;今年桂林电子科技&#xff0c;以前还是华为的校招大学&#xff0c;今年 计算机2/3待业。这个世…