【谷粒商城】

news2024/11/26 20:30:17

一、项目介绍

1.微服务架构图

在这里插入图片描述

2.微服务划分图

在这里插入图片描述

二、环境搭建

1.虚拟机搭建环境

这里我买了华为云,没用虚拟机
华为云配置
在这里插入图片描述

2.Linux 安装docker

docker文档:https://docs.docker.com/engine/install/centos/

# 1. 卸载之前的docker
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 2.安装 Docker-CE
sudo yum install -y yum-utils \
	device-mapper-persistent-data \
	lvm2
#设置 docker repo 的 yum 位置
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

#安装 docker,以及 docker-cli
sudo yum install docker-ce docker-ce-cli containerd.io

# 3.启动docker
docker systemctl start docker
# 4. 使用docker version查看是否按照成功
docker version

#5.配置 docker镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dock


3.docker安装配置mysql

1.安装mysql

docker pull mysql5.7

2.创建实例并启动

# 运行容器
sudo docker run -p 3312:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
# 参数说明 -p 3312:3306 将容器的3306端口映射到主机的3312端口
# -v 宿主机文件目录:容器内目录  将容器内文件挂载到宿主机上
# -e MYSQL_ROOT_PASSWORD=root 设置mysql密码为root
# -d 后台启动
# --name 给启动容器起名字

# 使用docker ps 查看启动的容器

3.修改mysql配置文件

# 进入配置文件挂载的目录下
cd /mydata/mysql/conf

# 编辑配置文件my.cnf
vim my.cnf

# 新增配置文件内容
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

# 修改配置文件之后,重启容器
docker restart mysql

4.通过容器的 mysql 命令行工具连接

docker exec -it mysql mysql -uroot -proot

5.设置root远程访问

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

6.进入容器文件系统

docker exec -it mysql /bin/bash

4.docker安装配置redis

如果直接挂载的话docker会以为挂载的是一个目录,所以我们先创建一个文件然后再挂载,在虚拟机中

# 1、创建配置文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

# 2、下载镜像
docker pull redis

# 3、启动容器
# 云服务器一定要修改端口或配置密码,否则会被拉去挖矿
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data  \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

# 4、直接进入redis客户端
docker exec -it redis redis-cli

修改配置文件,最新的redis默认持久化,我就没有改配置文件

vim /mydata/redis/conf/redis.conf

# 插入下面内容
appendonly yes    # 支持持久化
requirepass xxxxxx # 配置redis密码

# 保存
docker restart redis

# 进入redis客户端
docker exec -it redis redis-cli
auth xxxxxx

redis配置文件详解redis配置文件

redis可视化工具安装

连接:https://www.jb51.net/softs/669908.html#downintro2

下载完毕解压,运行文件夹中 redisdestop_v2020.5.0.exe 傻瓜式安装

连接到远程redis,输入账号密码即可

5.配置开发环境

下载maven并配置
IDEA安装插件lombok,mybatisX。IDEA设置里配置好maven

6.安装vscode

下载地址https://code.visualstudio.com/Download

vscode用于前端管理系统,在vsCode里安装插件

  • Auto Close Tag
  • Auto Rename Tag
  • Chinese
  • ESlint
  • HTML CSS Support
  • HTML Snippets
  • JavaScript ES6
  • Live Server
  • open in brower
  • Vetur

7.配置git

git、github使用详细笔记,见大佬https://blog.csdn.net/weixin_44190665/article/details/118024018

8.IDEA配置码云

码云上新建项目
IDEA上新建项目,选择从VC上创建,选择刚刚新建的仓库

9.初始化项目结构

1.建立子模块
在工程目录下新建Module,选择Spring Boot Initilizr新建,加上Spring web和openFeign,创建5个子模块。注意SpringBoot的版本在创建时无法选择,创建后在pom.xml中更改版本号为2.1.8.RELEASE

2.创建父模块
在工程目录下新建pom.xml文件,删掉多余属性,刷新项目

3.过滤上传git的垃圾文件
点开父工程的.gitignore文件,添加如下内容

**/mvnw
**/mvnw.cmd

**/.mvn
**/target/

.idea

**/.gitignore

4.向码云提交项目
填写提交信息、点击commit and push
5.查看码云,是否只有pom文件和源码

10.初始化数据库

创建数据库,运行sql文件,得到5个子模块的数据库

三、快速开发

1.使用人人开源框架搭建后台管理系统

1、码云上搜索人人开源,找到renren-fast(后台管理系统),renren-fast-vue(前端), 克隆到本地
在这里插入图片描述
2.删除renren-fast中的.git文件,把其余文件拷贝到项目中

3.修改父工程的pom.xml,把renren-fast 加入父工程
在这里插入图片描述
4.修改renren-fast中的pom文件
pom文件出现报错,需要修改

报错原因:子模块的parent写的并不是子模块的上一级,而是继承了springboot
解决方法:在parent标签之中修改版本号

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.8.RELEASE</version>
		<relativePath ></relativePath>
	</parent>

报错原因:plugin部分报错
解决办法:引入依赖或显示声明版本

<!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin -->
<dependency>
   <groupId>com.spotify</groupId>
   <artifactId>docker-maven-plugin</artifactId>
   <version>0.4.14</version>
</dependency>

<dependency>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>wagon-maven-plugin</artifactId>
	<version>1.0</version>
</dependency>

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.22.2</version>
	<configuration>
		<skipTests>true</skipTests>
	</configuration>
</plugin>

5.创建后台管理系统的数据库gulimall_admin
sql文件在renren-fast/db/ 目录下,找到其中的mysql.sql 复制,运行

6.修改renren-fast的配置文件、配置数据库
查看application.yml,发现当前环境为dev
在这里插入图片描述
配置url中的ip地址,访问的用户名和密码
在这里插入图片描述
7.启动renren-fast项目
报错
在这里插入图片描述
在这里插入图片描述

报错原因:Spring Boot版本升级后lombok版本相关api有所改动
解决方式:修改.xml文件中lombok版本,修改CorsConfig.java文件
在这里插入图片描述
在这里插入图片描述
解决后重新启动
在这里插入图片描述
运行成功

8.前端联调
首先安装nodehttps://nodejs.org/dist/v10.16.3/
安装后检查node.js

node -v

配置淘宝镜像

npm config set registry http://registry.npm.taobao.org/

vue项目用vscode打开,运行npm install命令,加载项目依赖,有点慢,有些依赖出错,没管

执行命令npm run dev运行项目,出现下图,运行成功
在这里插入图片描述
前后端联调,后台系统也运行起来
用户admin,密码admin,登录系统,看到的内容其实都是后台数据库查询出来的
在这里插入图片描述

2.人人开源逆向工程搭建

1.克隆renren-generator
在这里插入图片描述
2.删除其中的.git文件,复制到工程中,添加到父工程

3.pom.xml中添加

4.修改renren-generator的配置文件application.yml,配置自己的数据源
先生成gulimall-pms

5.修改生成器信息 generator.properties

6.修改src/main/resources/template/Controller.java.vm
删除导入shiro的语句,注释掉该位置,此处的注释是shiro提供的,我们以后要用spring security
7.运行generator项目,访问localhost:80,选中所有表,生成代码
8.解压生成的代码,把mian文件夹复制到gulimall-product/src下
\resources\src\views\modules\product (前端文件,用不到,删掉)
9.解决生成的代码报错
新建gulimall-common模块,用来引入每一个微服务公共的依赖、bean、工具类等
在这里插入图片描述
gulimall-common中的pom文件

<dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.14</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

先解决product中的问题,product的pom文件加上common的依赖

<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
</dependency>

由此解决dao、entity的报错

接下来解决service报错
在gulimall-common中按照要求创建包,引入PageUtils、Query、R、exception(在renren-fast里面复制)
复制xss下面的HTMLFilter、SQLFilter
在这里插入图片描述

依次解决所有报错

3.测试基本的CRUD功能

1.在gulimall-common中导入mybatis-plus依赖(已完成)

2.配置数据源,以gulimall-product为例

  • 在guli-common模块中引入mysql的依赖
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
  • 在product模块中配置数据源、端口等相关信息
server:
  port: 10000

spring:
  datasource:
    username: root
    password: xxxxxx
    url: jdbc:mysql://55.144.13.121:1234/gulimall_pms?userUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto   # 主键自增

  • 在测试类中进行测试

这里注意检查springboot和springCloud的版本兼容问题,如果不兼容在pom文件中更改cloud版本
Test类等依赖也要加

@RunWith(SpringRunner.class)
@SpringBootTest
public class GulimallProductApplicationTests {

    @Autowired
    BrandService brandService;

    @Test
    public void contextLoads(){
        BrandEntity brandEntity = new BrandEntity();
        brandEntity.setName("华为");
        brandService.save(brandEntity);
        System.out.println("保存成功");
    }

}

查看数据库,新增数据成功

同理自测删除、修改、查询

4.快速生成所有CRUD代码

1.先配置微服务端口,按顺序coupon/member/order/product/ware分别为7000/8000/9000/10000/11000

2.修改生成器代码配置
在这里插入图片描述
在这里插入图片描述
3.生成coupon的代码,复制到工程中,并在gulimall-coupon工程中引入gulimall-common依赖

4.修改gulimall-coupon的配置文件
从product复制过去,只需要修改数据库名字和端口

5.启动后访问http://localhost:7000/coupon/coupon/list测试
在这里插入图片描述
测试成功

6.按照以上方法分别生成gulimall-member/gulimall-order/gulimall-ware的代码

四、

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[MySql]初识数据库与常见基本操作

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 文章目录 前言 1.初识数据库 1.1 数据库概述 1.2 数据库…

mysql隔离级别RR下的行锁、临键锁、间隙锁详解及运用

一&#xff1a;mysql 锁的基本概念 锁&#xff1a;悲观锁、乐观锁 悲观锁&#xff1a;写锁 for update、读锁for share 写锁&#xff1a;只允许当前事务读写&#xff0c;其它事务全部等待&#xff0c;包括读取数据&#xff0c;锁的数据范围需要具体分析 读锁&#xff1a;允…

【前端】Vue+Element UI案例:通用后台管理系统-Echarts图表:折线图、柱状图、饼状图

文章目录目标代码数据改写为动态Echarts引入与html结构折线图&#xff1a;orderData柱状图&#xff1a;userData饼状图&#xff1a;videoData总效果总代码:Home.vue上一篇&#xff1a;【前端】VueElement UI案例&#xff1a;通用后台管理系统-Echarts图表准备&#xff1a;axios…

公司缺人自己搞了vue又搞koa,熬夜把架子搭起来

如果有一天&#xff0c;人手紧缺&#xff0c;自己搞了前端还要搞服务端&#xff0c;今天我们把这个项目架子搭起来&#xff0c;让前端同学也可以轻松全栈开火。 技多不压身&#xff0c;活儿多了可压身啊 目录 一、上午写VUE 1、 新建一个我们的伟大项目文件夹 2、用vscode打…

程序中断方式

中断的基本概念 程序中断是指在计算机执行现行程序的过程中&#xff0c;出现某些急需处理的异常情况或特殊请求&#xff0c;CPU暂时中止现行程序&#xff0c;而转去对这些异常情况或特殊请求进行处理&#xff0c;在处理完毕后CPU又自动返回到现行程序的断点处&#xff0c;继续…

c语言之“数组”初级篇

前言 牛牛又和大家见面了&#xff0c;本篇牛牛要讲的内容是c语言中有关数组的内容。 欢迎大家一起学习&#xff0c;共同进步。 目录前言数组一、一维数组1.1 一维数组的创建1.2 一维数组的初始化1.3 一维数组的应用1.4 一维数组的存储二、二维数组2.1 二维数组创建2.2 二维数…

MySQL的select语句

SQL概述 SQL背景知识 1946 年&#xff0c;世界上第一台电脑诞生&#xff0c;如今&#xff0c;借由这台电脑发展起来的互联网已经自成江湖。在这几十年里&#xff0c;无数的技术、产业在这片江湖里沉浮&#xff0c;有的方兴未艾&#xff0c;有的已经几幕兴衰。但在这片浩荡的波…

基于android的车辆违章停放执法移动APP(ssm+uinapp+Mysql)-计算机毕业设计

车辆违章停放执法移动APP的功能已基本实现&#xff0c;主要实现首页&#xff0c;个人中心&#xff0c;市民管理&#xff0c;警察管理&#xff0c;罚单信息管理&#xff0c;缴费通知管理&#xff0c;系统管理等功能的操作系统。 论文主要从系统的分析与设计、数据库设计和系统的…

【机器学习】回归的原理学习与葡萄酒数据集的最小二乘法线性回归实例

文章目录一&#xff0c;回归1.1回归分析的基本概念1.2线性回归1.3最小二乘法1.4一元(简单)线性回归模型1.4.1随机误差项(线性回归模型)的假定条件1.4.2参数的普通最小二乘估计(0LS)1.5葡萄酒数据集的最小二乘法线性回归实例一&#xff0c;回归 1.1回归分析的基本概念 回归分析…

前端一面经典vue面试题总结

一般在哪个生命周期请求异步数据 我们可以在钩子函数 created、beforeMount、mounted 中进行调用&#xff0c;因为在这三个钩子函数中&#xff0c;data 已经创建&#xff0c;可以将服务端端返回的数据进行赋值。 ​ 推荐在 created 钩子函数中调用异步请求&#xff0c;因为在…

受激拉曼散射计量【Stimulated-Raman-Scattering Metrology】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

单元测试的时候读不到resources.test中配置

背景 接手了几个老工程&#xff0c;跑单元测试的时候&#xff0c;发现数据库的配置总是走了dev环境&#xff0c; 原因是工程中分环境进行了db的配置 历史经验 指定本地环境 ActiveProfiles(“test”) 没有生效 解决 在pom文件中 新加如下配置 <build><!--单元测…

Java—类加载机制

类加载机制 我们多次提到了类加载器ClassLoader&#xff0c;本章就来详细讨论Java中的类加载机制与ClassLoader。 类加载器ClassLoader就是加载其他类的类&#xff0c;它负责将字节码文件加载到内存&#xff0c;创建Class对象。与之前介绍的反射、注解和动态代理一样&#xf…

奶制品数据可视化,去年全国奶制品产量高达3778万吨,同比增长7.1%

奶制品是生活中很常见的一种补充人体所需维生素和矿物质元素的重要食品&#xff0c;在生活中奶制品也是很常见的&#xff0c;食用最多的是牛奶。牛奶中含有非常丰富的钙质&#xff0c;睡前适当给孩子食用&#xff0c;可以补充孩子所需的钙质从而达到长高的效果。 很多小伙伴经常…

C++ 类和对象以及内存管理 练习错题总结

作者&#xff1a;小萌新 专栏&#xff1a;C初阶作业 简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客介绍&#xff1a;对于我们上一周学的知识做一个总结 查缺补漏 C 类和对象以及内存管理练习类和对象 (上)拷贝构造函数类和对象&#xff08;中&#xff09;重载函数运…

MySQL 主从复制与读写分离

一 概念 什么是读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要读写分离 因为数据库的“写…

刷题笔记之九(查找输入整数二进制中1的个数+完全数计算+杨辉三角的变形+计算某字符出现次数)

目录 1. 聚合查询是进行行与行的运算合并&#xff0c;是不能和别的列放在一块查询 2. PHP数据库查询语句 3. 有group by时先执行where&#xff0c;后执行having 4. join常用两张表内连接和外连接&#xff0c;用一张表可以自连接 5. 删除数据用delete&#xff0c;删除表时…

python基于PHP+MySQL汽车展览会系统

随着我国交通事业的发展,汽车已经逐渐的成为了人们主要的代步工具之一,但是如何从众多品牌和型号的车海中选择最适合自己的那款车是很多购车人士一直以来关系的问题。为了方便车主更好的选择自己的车辆很多汽车经销商会不定期的举办一些车展来展销自己的车辆,同时也给购车用户提…

2022 “行业寒冬”,给在座的测试人一些涨薪建议

10 月 24 日&#xff0c;Python 官方发布了最新的 3.11 版本&#xff0c;新的版本速度提升2倍&#xff0c;以弥补与其他编程语言在速度上的缺陷。可以预见Python语言在未来的应用范围会越来越广。 会Python语言能细分出许多从业方向&#xff0c;其中随着互联网的发展&#xff…

Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值?

Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值? Python_Numpy库的ndarray对象的常用属性有如下这些&#xff1a; ndim—矩阵的维度&#xff1b; shape—矩阵的形状&#xff1b; size—矩阵的元素个数&#xff1b; dtype—矩阵元素的数据类型&#xff1b; T-矩阵…