谷粒商城(一)
- 1、环境搭建
- 安装 docker
- docker 安装 mysql
- docker 安装 redis
- 安装配置 git
- 准备工具 IDEA、VsCode
- 从 gitee 初始化项目
- 2、创建微服务项目
- 1)、创建项目
- 2)、初始化数据库
- 3、使用人人开源搭建后台管理系统
- 1)、renren-fast
- 2)、renren-fast-vue
- 3)、安装 Node.js
- 4)、人人运行出错汇总:
- 4、使用数据库逆向工程生成代码
- gulimall-common 模块
- gulimall-product 模块
- 整合MyBatis-Plus
- 5、分布式组件
- nacos注册中心
- nacos配置中心
- openFeign
- gateway
1、环境搭建
本项目的 redis、MySQL 都是使用在 docker 容器里面的,所以需要 Linux 环境
安装 docker
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-cliyum install docker-ce docker-ce-cli containerd.io
3、启动 docker
systemctl start docker
4、设置 docker 开机自启
systemctl enable docker
5、测试 docker 常用命令,注意切换到 root 用户下
docker version
docker 常用命令
6、配置 docker 镜像加速
# 登陆阿里云开发者平台 -> 点击控制台 -> 选择容器镜像服务 -> 下面操作文档里面的配置镜像加速mkdir -p /etc/docker
vim /etc/docker/daemon.jsontee /etc/docker/daemon.json <<-'EOF'
{ "registry-mirrors": `["https://82m9ar63.mirror.aliyuncs.com"]
}
EOFsystemctl 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
redis 自描述文件
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=alwaysdocker 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 账号
4、配置 ssh 免密登录
进入 git bash;使用:ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
命令。 连续三次回车
然后执行 cat ~/.ssh/id_rsa.pub
,会得到一串密钥
登录进入 gitee,在设置里面找到 SSH KEY
将 密钥 的内容粘贴进去
使用 ssh -T git@gitee.com 测试是否成功即可
Git+码云教程
准备工具 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.csdn.net/weixin_43859732/article/details/107779450
https://blog.csdn.net/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 {@Overridepublic 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.Driverurl: jdbc:mysql://150.158.171.144:3306/gulimall_wms?useUnicode=true&characterEncoding=UTF-8&useSSL=falseusername: rootpassword: 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.Driverurl: jdbc:mysql://150.158.171.144:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=falseusername: rootpassword: 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/**/*.xmlglobal-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