谷粒商城(一)
1、环境搭建
本项目的 redis、MySQL 都是使用在 docker 容器里面的,所以需要 Linux 环境
安装 docker
1、卸载系统之前的 docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装 Docker-CE
# 安装必须的依赖
yum install -y yum-utils
# yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
# 更新yum软件包索引
yum makecache fast
# 设置stable镜像仓库
这里使用阿里云
yum-config-manager --add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下面是官网,是外网,不推荐
yum-config-manager --add-repo
https://download.docker.com/linux/centos/docker-ce.repo
# 安装 docker,以及 docker-cli
yum install docker-ce docker-ce-cli containerd.io
3、启动 docker
systemctl start docker
4、设置 docker 开机自启
systemctl enable docker
5、测试 docker 常用命令,注意切换到 root 用户下
docker version
6、配置 docker 镜像加速
# 登陆阿里云开发者平台 -> 点击控制台 -> 选择容器镜像服务 -> 下面操作文档里面的配置镜像加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": `["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart
docker 安装 mysql
1、下载镜像文件docker pull mysql:5.7
2、创建实例并启动
docker run -p 3306: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 3306:3306
:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql
:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql
:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/
:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root
:初始化 root 用户的密码
MySQL 配置
vi /mydata/mysql/conf/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
注意:解决 MySQL 连接慢的问题
在配置文件中加入如下,并重启 mysql
[mysqld]
skip-name-resolve
解释:
skip-name-resolve
:跳过域名解析
3、通过容器的 mysql 命令行工具连接
docker exec -it mysql mysql -uroot -proot
4、设置 root 远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
5、进入容器文件系统
docker exec -it mysql /bin/bash
docker 安装 redis
1、下载镜像文件docker pull redis
2、设置配置文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
3、修改 /etc/redis/redis.conf 文件
# 开启 redis 验证(可选)
requirepass 123456
# 允许 redis 外地连接,注释掉
# bind 127.0.0.1
# 设置
daemonize no
# 开启 redis 持久化,appendonly yes (可选)
4、创建实例并启动
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
5、使用 redis 镜像执行 redis-cli 命令连接docker exec -it redis redis-cli
设置随着 docker 自启动
docker update mysql --restart=always
docker update redis --restart=always
安装配置 git
1、下载 git https://git-scm.com
2、配置 git,进入 git bash
# 配置用户名
git config --global user.name "username" //(名字)
# 配置邮箱
git config --global user.email "username@email.com" //(注册账号时用的邮箱)
3、IDEA 初始化 git
在用户目录下(C:\Users\ASUS)创建忽略规则文件 git.ignore,写入内容
在 .gitconfig 文件中引用忽略配置文件
在 IDEA 中设置,定位 Git 程序
3、IDEA 集成 Gitee
安装 Gitee 插件,登录 Gitee 账号
进入 git bash;使用:ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
命令。 连续三次回车
然后执行 cat ~/.ssh/id_rsa.pub
,会得到一串密钥
登录进入 gitee,在设置里面找到 SSH KEY
将 密钥 的内容粘贴进去
使用 ssh -T git@gitee.com 测试是否成功即可
准备工具 IDEA、VsCode
idea 安装 lombok、mybatisx 、gitee 插件
Vscode 安装开发必备插件:
- Vetur —— 语法高亮、智能感知、Emmet 等 包含格式化功能, Alt+Shift+F (格式化全文),Ctrl+K Ctrl+F(格式化选中代码,两个 Ctrl 需要同时按着)
- EsLint —— 语法纠错
- Auto Close Tag —— 自动闭合HTML/XML 标签
- Auto Rename Tag —— 自动完成另一侧标签的同步修改
- JavaScript(ES6) code snippets — — ES6 语法智能提示以及快速输入,除 js外还支持.ts,.jsx,.tsx,.html,.vue,省去了配置其支持各种包含 js 代码文件的时间
- HTML CSS Support —— 让 html 标签上写 class 智能提示当前项目所支持的样式
- HTML Snippets —— html 快速自动补全
- Open in browser —— 浏览器快速打开
- Live Server —— 以内嵌服务器方式打开
- Chinese (Simplified) Language Pack for Visual Studio Code —— 中文语言包
从 gitee 初始化项目
新建仓库
IDEA 拉取项目
2、创建微服务项目
1)、创建项目
商品服务、仓储服务、订单服务、优惠券服务、用户服务
共同:
- 都加入的是 web、openfeign 依赖
- 每一个服务的包名
afei.xxx(product/order/ware/coupon/member)
- 模块名:gulimall-coupon
商品服务
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>afei.gulimall</groupId>
<artifactId>gulimall-product</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall-product</name>
<description>谷粒商城-商品服务</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>afei.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<!-- 版本后由SpringBoot进行管理-->
</dependency>
<!--引入redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!--不加载自身的 lettuce-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--以后使用 redisson 作为分布锁,分布式对象等功能-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.12.0</version>
</dependency>
<!--整合SpringCache简化缓存开发-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--使用 @ConfigurationProperties-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
仓储服务如下(订单服务、优惠券服务、用户服务类似)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>afei.gulimall</groupId>
<artifactId>gulimall-ware</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall-ware</name>
<description>谷粒商城-仓储服务</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>afei.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
修改 父类 项目的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>afei.gulimall</groupId>
<artifactId>gulimall</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall</name>
<description>聚合服务</description>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
<module>renren-fast</module>
<module>gulimall-common</module>
<module>renren-generator</module>
</modules>
</project>
修改 父类 项目的 .gitignore 文件
,让其子类的部分文件不被提交
**/mvnw
**/mvnw.cmd
**/.mvn
**/.gitignore
**/target/
.idea
可在这里查看提交到码云的内容预览
2)、初始化数据库
建立对应的数据库
将提供的 sql 文件里面的语句复制进 navicat 执行,直接拖拽sql文件容易出现问题
3、使用人人开源搭建后台管理系统
点进去后,克隆
在桌面右击,打开 Git Bash ,将代码下载到桌面
1)、renren-fast
将后端代码复制进 项目 目录
在 父类项目 里面加入 人人开源的 module
<modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall</name>
<description>聚合服务</description>
<packaging>pom</packaging>
<modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
<module>renren-fast</module>
<module>renren-generator</module>
<module>gulimall-common</module>
</modules>
renren-fast 里面有数据库的 sql 语句文件,在数据库创建新库 gulumall_admin ,执行 sql 语句
修改 renren-fast 的配置文件
启动此项目
注意,若 renren-fast 集成了 nacos,就还需要启动 Nacos 服务
问题解决:
1、报错:communication link failure ,或者显示初始化 init datasource error 的,数据库连接配置后面加 &useSSL=false
2、报错找不到包异常的,用一下右边侧边栏的maven里面的install命令
3、数据库连接配置 url 应该如下
gulimall_adminserverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
4、springboot 版本最好一样 2.1.8.RELEASE
访问 localhost:8080/renren-fast
2)、renren-fast-vue
将桌面上的文件目录 删除 .git 目录,然后用 VsCode 打开
3)、安装 Node.js
前端开发,少不了 Node.js
Node.js 是一个基于 ChromeV8引擎的 JavaScript 运行环境。
NPM是随同NodeJS一起安装的包管理工具,JavaScript-NPM,Java-Maven;
1)、官网下载安装node.js,并使用 node-v
检查版本。注意版本!!
2)、配置npm使用淘宝镜像
npm config set registry http://registry.npm.taobao.org/
打开 VsCode ,在终端输入 npm install
也可以选择项目文件夹下打开 cmd 命令窗口,和终端一样(注意需要配置环境变量,参考文章)
输入 npm install 安装 npm,nodejs默认集成npm
这里npm报错的同学,可以退出vs,然后管理员运行vs,再执行一遍。如果还是不行 就新建一个终端再输入一次npm stall就好了
有报错误的,可以试一下用 cnpm install试试先
出错可参考:https://blog.youkuaiyun.com/weixin_43859732/article/details/107779450
https://blog.youkuaiyun.com/wangbeita/article/details/112517509
出现以下界面说明成功
我这里没有使用 vs,而是使用 cmd 窗口进行操作的
注意执行 npm install 之前,为了防止出错,已经将 renren-fast-vue 项目文件夹下的 package.json 里面的 node-sass 改成 4.9.2
成功后可访问准备启动项目(注意 renren-fast 的 8080 在运行状态,数据库也在运行)
我这里没有下载 vs,在项目的目录下,使用管理员权限打开 cmd ,执行 npm run dev
便可以启动前端项目
这是 vs 启动成功样式
刷新 登录界面的 图形验证码,发现后台有输出,说明成功
4)、人人运行出错汇总:
1、启动renren-fast后台报错 Error creating bean with name ‘scheduleJobService‘
路径:src/main/java/io/renren/modules/job/config/ScheduleConfig.java
ScheduleConfig类中 //PostgreSQL数据库,需要打开此注释
2、在启动之后,登陆时发现跨域问题:
CorsConfig 类中 addCorsMappings 方法,需要打开此注释
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}
3、当有这种报错,说明是因为引入了 mybatis 的依赖,底层就会有引入数据源的相关配置。如果模块中没有使用到数据库,没有配置数据库相关信息,就会报错
解决:
在依赖中排除 数据库自动配置的相关依赖,也可以在启动类中排除
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
4、使用数据库逆向工程生成代码
可以使用 人人开源的 自动生成项目,也可以使用 MybatisX 插件,使用 IDEA 自带的数据库管理工具
将人人开源的 代码生成 项目克隆到本地
删除目录中的 .git 目录,然后作为项目的 子模块
<modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
<module>renren-fast</module>
<module>gulimall-common</module>
<module>renren-generator</module>
</modules>
修改项目的配置文件 application.yml
,更改数据库配置,数据库为需要生成代码的数据库
# mysql
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
#MySQL配置
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://150.158.171.144:3306/gulimall_wms?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root
修改信息文件 generator.properties
,更改里面生成类的包名和类名
#代码生成器,配置信息
mainPath=afei
#包名
package=afei
moduleName=ware
#作者
author=afei
#Email
email=afei@gmail.com
#表前缀(类名不会包含表前缀)
tablePrefix=wms_
项目运行之后,访问页面,可以看到控制台,选择需要的表,进行生成代码
生成出来的代码会以压缩包形式下载
打开压缩包,可以看到生成好的代码
在生成的 controller 类里面,使用的是 shiro 的权限注解,但是本案例中使用的是 SpringSecurity ,所以需要删除注解
但是一个一个删除比较麻烦,可以在生成代码之前,在 renren-generator 项目里面修改模板
将代码复制进需要的项目里面,打开类,发现会有报错,因为一些工具类没有正确引用
对于 如下图 的 common
包中的工具类,在前面使用的 renren-fast
项目里面 的 common 包 下的 util 包里面都有现成的
然后打开其他类,发现还需要 Lombok、MybatisPlus 等依赖,所以可以提供一个公共类项目,用于提供公用的依赖 以及 一些工具类等
gulimall-common 模块
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>gulimall</artifactId>
<groupId>afei.gulimall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gulimall-common</artifactId>
<description>每一个微服务公共的依赖,bean,工具类等</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.12</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!--导入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>
<!--服务注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>compile</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
实体类
将刚刚生成代码的项目里面需要用到的 common 包下的工具类,从 renren-fast 项目里面拷贝过来
暂时只有红框里面的内容,其他内容都是后续手动创建的
gulimall-product 模块
各个模块的端口号
整合MyBatis-Plus
导入依赖 mybatis-plus-boot-starter 3.2.0 (放在common项目)
<!-- mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
配置 :
-
配置数据源;
-
导入数据库的驱动。mysql-connector-java 8.0(放在common项目)
<!--导入mysql驱动 --> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency>
-
在application.yml配置数据源相关信息
server: port: 10000 # mysql spring: datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://150.158.171.144:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false username: root password: root
-
配置MyBatis-Plus;
-
使用
@MapperScan
@MapperScan("afei.product.dao") @SpringBootApplication public class GulimallProductApplication { public static void main(String[] args) { SpringApplication.run(GulimallProductApplication.class, args); } }
-
告诉MyBatis-Plus,sql映射文件位置 ,并设置主键自增
mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: db-config: id-type: auto #设置主键自增
-
-
-
测试
5、分布式组件
nacos注册中心
在 common 项目里面引入依赖
<!--服务注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后在其他项目里面更改配置文件
在启动类上使用注册发现的注解 @EnableDiscoveryClient
nacos配置中心
在 common 项目里面引入依赖
然后在其他项目里面更改配置文件
如何使用Nacos作为配置中心统一管理配置:
-
引入依赖, spring-cloud-starter-alibaba-nacos-config
-
创建一个bootstrap.properties
-
需要给配置中心默认添加一个叫 数据集(Data Id),Data Id默认命名规则——应用名.properties
-
给 Data Id 添加任何配置
-
动态刷新配置
控制器 controller 上面使用注解@RefreshScope
,表明动态获取并刷新配置 -
注意,若配置中心和文件中配置了相同的配置项,优先使用 配置中心的配置
-
加载多个配置集
openFeign
想要远程调用别的服务:
- 引入open-feign
- 编写一个接口,告诉SpringCloud这个接口需要调用远程服务
- 声明接口的每一个方法都是调用哪个远程服务的那个请求
- 开启远程调用功能
启动类上使用注解@EnableFeignClients
在需要进行远程调用的模块的 pom 文件里面引入依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
目标方法如下:
在 member 模块编写接口
在 member 模块启动类上加注解
最后即可 在 member 模块 实现远程调用
gateway
新建模块,加入 gateway 依赖
- 开启服务注册发现(配置nacos的注册中心地址)
- 编写网关配置文件
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>afei.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
启动类上开启注册发现 @EnableDiscoveryClient
编写配置文件
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=b5d62415-0dea-4747-a65d-874cc6203bf2
spring:
cloud:
gateway:
routes:
# 表明请求时如果有参数url,且参数值为baidu时,就会跳转到https://www.baidu.com
# 例如访问 88/hello?url=baidu 会跳转到 baodu.com/hello
# - id: test_route
# uri: https://www.baidu.com
# predicates:
# - Query=url,baidu
# 表明请求时如果有参数 url,且参数值为 qq时,就会跳转到 https://www.qq.com
# 例如访问 88/hello?url=qq,会跳转到 qq.com/hello
# - id: qq_route
# uri: https://www.qq.com
# predicates:
# - Query=url,qq
## 前端项目,/api
## http://localhost:88/api/captcha.jpg http://localhost:8080/renren-fast/captcha.jpg
## http://localhost:88/api/product/category/list/tree http://localhost:10000/product/category/list/tree