
下载Virtualbox 安装
下载vagrant 安装 重启 判断是否安装成功

安装centos7镜像文件 vagrant init centos/7设置环境
vagrant up启动环境
需要很长时间

启动成功Virtualbox 也会自动运行虚拟机

直接在命令窗口 vagrant shh 就可以连接虚拟机了,
配置网络
cmd 查看IP

把

这个文件的这里

改成对应的IP地址,然后重启 vagrant reload

如果无法重启就通过Virtualbox 直接关机在打开,
ipaddr查看一下IP改对没,然后在ping一下外机
使用vagrant ssh启动时一定保证在vagrantfile文件目录下打开
删除以前记录
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
设置存储库sudo yum install -y yum-utils
sudo yum-config-manager --add-repo \https://download.docker.com/linux/centos/docker-ce.repo

安装sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

启动docker sudo systemctl start docker
设置docker开机自起 sudo systemctl enable docker

sudo docker pull mysql:版本

sudo docker images 查看是否安装
切换成root用户完成创建实例操作 su root 密码为 vagrant whoami 查看当前用户

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 端口
–name mysql :起一个容器名字
-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 用户的密码
这一步发送了错误
docker: invalid reference format. See ‘docker run --help’.
查看错误 $ sudo dockerd --debug
INFO[2022-11-10T05:42:34.344590302Z] Starting up
DEBU[2022-11-10T05:42:34.346441844Z] Listener created for HTTP on unix (/var/run/docker.sock)
failed to start daemon: Unable to get the TempDir under /var/lib/docker: mkdir /var/lib/docker/tmp: no space left on device
在unix上为HTTP创建的侦听器(/var/run/docker.sock)
无法启动守护程序:无法获取/var/lib/docker:mkdir/var/lib/docker/tmp下的TempDir:设备上没有剩余空间
尝试删除docker.sock 还是失败
什么事docker.sock
查看dev/sdal 发现他妈的占了40g

发现问题
vagrant提供了将本机目录挂载到虚拟机目录下的功能,默认是将vagrant配置文件所在目录挂载到虚拟机/vagrant目录下。


退出进入conf文件夹 vi 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 重启mysql
cat查看 my.cof 有没有

touch /mydata/redis/conf/redis.conf :创建配置文件
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 : 创建映射
3. 

4. 修改配置信息 添加开启 aof新版的默认开启了
5. 查看redis官方的配置信息,这个会了很重要
安装前端插件



选择spring

sudo docker update mysql --restart=always
sudo docker update redis --restart=always重启查看是否自动启动




官网
检查版本
设置阿里镜像 npm config set registry http://registry.npm.taobao.org/
大家如果 npm install 安装依赖出现 chromedriver 之类问题,先在项目里运行下面命令 npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver 然后再运行 npm install

无错误信息表示下载成功,如果下载失败请退出要管理员身份运行,或者退出新建终端,确认网络

git clone generator代码生成工具
吧文件中的git删除,吧generator放到项目中并添加maven模块名称
修改配置信息生成代码,先生成pms数据库,product模块

注意修改正确代码生成模板
修改完成后启动项目
全选点击生成代码生成一个压缩包
将生成的product模块的main文件直接粘贴在项目中,



<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.2.0version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.8version>
dependency>
<dependency>
<groupId>org.apache.httpcomponentsgroupId>
<artifactId>httpcoreartifactId>
<version>4.4.12version>
dependency>
<dependency>
<groupId>commons-langgroupId>
<artifactId>commons-langartifactId>
<version>2.6version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.17version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
<scope>providedscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
修改generator的配置路径根据对应的模块和数据库然后新增就OK了

生成之后启动一下测试一下
一样的方式,
注意pom文件的引要公共模块文件

注意设置服务端口号如果端口号被占用就可以参考这个文章
弄好后运行,测试一下http://localhost:8000/member/growthchangehistory/list




和上面差不多
java.lang.IllegalStateException: Failed to load ApplicationContext
Cannot instantiate interface org.springframework.context.ApplicationListener : org.springframework.cloud.bootstrap.BootstrapApplicationListener
org/springframework/cloud/bootstrap/BootstrapApplicationListener has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
原因我创建的时候不能选择视频中的版本,然后jdk为17
这个我只改了jdk ,没该下面cloud的版本哭死

<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.1version>
dependency>
mybatis-plus:
mapper-locations: classpath:/mapper/*Mapper.xml
type-aliases-package: com.atguigu.gulimall.product.entity
global-config:
db-config: #全局配置
id-type: auto #主键策略
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
https://github.com/alibaba/spring-cloud-alibaba
阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用成套的产品搭配完善的可视化界面给开发运维带来极大的便利
搭建简单,学习曲线低。
SpringCloud Alibaba - Nacos:注册中心(服务发现/注册): 一个更容易构建云原生应用的动态服务发现、配置管理和服务管理平台。
SpringCloud Alibaba - Nacos:配置中心(动态配置管理)
SpringCloud - Ribbon:负载均衡
SpringCloud - Feign:声明式 HTTP 客户端(调用远程服务)
SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断) :Sentinel以“流量”为切入点,提供流控、并发、熔断、负载保护等方面的解决方案,保障服务稳定性。
SpringCloud - Gateway:API 网关(webflux 编程模式)
SpringCloud - Sleuth:调用链监控
SpringCloud Alibaba - Seata:原 Fescar,即分布式事务解决方案 :阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
由于 Spring Boot 1 和 Spring Boot 2 在 Actuator 模块的接口和注解有很大的变更,且
spring-cloud-commons 从 1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟
SpringBoot 版本号一致的版本:
1.5.x 版本适用于 Spring Boot 1.5.x
2.0.x 版本适用于 Spring Boot 2.0.x
2.1.x 版本适用于 Spring Boot 2.1.x
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
spring:
application:
name: gulimall-coupon
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
mybatis-plus:
mapper-locations: "classpath:/mapper/**/*.xml"
global-config:
db-config:
# 自增主键
id-type: auto
server:
port: 7000
‘加注解’使用@EnableDiscoveryClient开启服务注册发现功能
问题新版本默认启动为集群 "nacos is starting with cluster
解决参考文章
bin目录下 命令启动
startup.cmd -m standalone
中间我遇到了个麻烦,我选择了高版本的spring 然后又切换回了老师的版本,junit在2.1上和下是不同的写法
参考文章 作者:大佬腿好粗
打开


慢慢把其他的服务都注册上
Feign是一个声明式的HTTP客户端,它的目的就是让远程调用更加简单。Feign提供了HTTP
请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地
址等信息。
Feign整合了Ribbon(负载均衡)和Hystrix(服务熔断),可以让我们不再需要显式地使用这 两个组件。
SpringCloudFeign在NetflixFeign的基础上扩展了对SpringMVC注解的支持,在其实现下,我
们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了
SpringCloudRibbon自行封装服务调用客户端的开发量。
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
package com.atguigu.gulimall.member.feign;
/**
* 这是一个声明式服务
*/
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
@RequestMapping("coupon/categorybounds/member/list")
public R memberCoupons();
}

@RestController
@RequestMapping("member/member")
public class MemberController {
@Autowired
CouponFeignService couponFeignService;
/**
* 测试openfeign
* @return
*/
@RequestMapping("/coupons")
public R test(){
MemberEntity member = new MemberEntity();
member.setNickname("张三");
R r = couponFeignService.memberCoupons();
return R.ok().put("member",member).put("coupons",r.get("coupons"));
}

5. 开启远程服务调用
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")

6. 测试

原理
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
创建一个bootstrap.properties 配置用户名和用户中心地址

在配置中心配置数据
NacosConfig主要通过dataId和group来唯一确定一条配置。

给 应用名.properties 添加任何配置
动态获取配置。

@RefreshScope:动态获取并刷新配置
@Value("s配置项的名》”): 获取到配置。如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置
修改配置发布测试
命名空间: 配置隔离
默认public(保留空间)默认新增的都在public,可以配置测试空间,生产空间之类的,通过切换id来切换空间,也可以把每个微服务创建一个命名空间

配置集
配置的集合
配置集id
配置文件名称

配置分组 添加1111分组可以根据组名称去选择配置

在选择组
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=abbe2e42-a212-4480-8533-3c7545adf963
spring.cloud.nacos.config.group=111
可以用命名空间来区分不同的微服务,分组来区分环境
5. 同时加载多个配置集,把对应的配置放到对应创建的配置级里面 other放剩下的(nacos配置里面不要加空行,不要加中文)



6. 微服务的任何配置信息,和配置文件都可以放到配置中心 不改变之前取配置信息的方式
7. 只需要在bootstrap.properties说明加载配置中心哪个配置文件即可
8. 以前SpringBoot任何方法从配置文件中获取值,都能使用。
9. 配置中心和配置文件中的配置优先级:
让所有的请求都通过gateway这个服务去访问其他服务,那么就只需要对这个外观服务进行限流熔断等操作就可以了。
通过spring模板新建一个模块,只选择getaway的jar包,在把公共模块的包引过去 (@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)排除数据库包)

nacos注册服务,在创建配置文件
别忘记写注册服务的注解@EnableDiscoveryClient

application.properties
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=1f986a10-dfe9-493d-a63a-b1fe11c310eb

个人笔记,不同意见,望有交流
直接可以点击跳转连接
作者 尚硅谷