添加如下配置,重启IDEA
版本控制
在 .gitignore 配置文件中,可以忽略要commit的文件
如
**/mvnw **/mvnw.cmd **/.mvn **/target .idea **/.gitignore虚拟机安装jdk1.8
1 下载并解压jdk1.8 tar -zxvf jdk-8u281-linux-x64.tar.gz(检查本机有没有jdk有的话卸载掉。安装上自己的jdk) 2 配上环境变量 vim /etc/profile # 添加一下两行代码 export JAVA_HOME=jdk的位置 export PATH=$PATH:$JAVA_HOME/bin 3 使配置生效 source /etc/profile安装docker
1 卸载系统之前的docker
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
2 设置存储库
sudo yum install -y yum-utils
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
3 安装DOCKER引擎
sudo yum install docker-ce docker-ce-cli containerd.io
4 启动Docker.
sudo systemctl start docker
5 配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://chqac97z.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker安装mysql
1 拉取mysql镜像 docker pull mysql:5.7 2 启动mysql容器 # --name指定容器名字 -v目录挂载 -p指定端口映射 -e设置mysql参数 -d后台运行 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 3 进入mysql容器 docker exec -it 容器名称|容器id bin/bash 4.自启 docker update mysql --restart=always 5.注意事项 mysql 8.0 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';docker安装redis
1 在docker hub搜索redis镜像 docker search redis 2 拉取redis镜像到本地 docker pull redis:6.0.10 3 修改需要自定义的配置(docker-redis默认没有配置文件, 自己在宿主机建立后挂载映射) 创建并修改/usr/local/redis/redis.conf bind 0.0.0.0 开启远程权限 appendonly yes 开启aof持久化 4 启动redis服务运行容器 docker run --name redis -v /usr/local/redis/data:/data -v /usr/local/redis/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 -d redis:6.0.10 redis-server /usr/local/etc/redis/redis.conf 解释: -v /usr/local/redis/data:/data # 将数据目录挂在到本地保证数据安全 -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf # 将配置文件挂在到本地修改方便 5 直接进去redis客户端。 docker exec -it redis redis-cli 6.自启 docker update redis --restart=always虚拟机防火墙
1.查看防火墙状态 firewall-cmd --state 2. # 永久关闭防火墙,防止开机自启动 systemctl stop firewalld.service #停止防火墙 systemctl disable firewalld.service #防止开机启动防火墙SpringBoot和Spring Cloud Alibaba 版本对应关系
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
nacos(注册中心)com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.0.1.0 pom import
引入依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
启动方式 standalone
startup.cmd -m standalone
在服务的启动类上添加 @EnableDiscoveryClient 注解
在application.yml配置nacos地址和服务名
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
启动服务即可在nacos中发现服务
Fegin(声明式的远程调用)引入依赖
org.springframework.cloud spring-cloud-starter-openfeign
由于Spring Cloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错.
解决方法:
加入spring-cloud-loadbalancer依赖 并且在nacos中排除ribbon依赖,不然loadbalancer无效
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.netflix.ribbon ribbon
org.springframework.cloud spring-cloud-starter-loadbalancer 3.1.3
在需要调用远程的服务的启动类上添加
@EnableFeignClients(basePackages = "com.xxx.feign")
注解
创建 com.xxx.feign 路径并创建接口文件
@FeignClient("gulimall-coupon")//调用的 目标服务 名字
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list") //目标地址
public R memberCoupons();
}
调用
在controller中注入该接口
@Autowired CouponFeignService couponFeignService;
即可使用该接口中声明的方法
nacos(配置中心)引入依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-configorg.springframework.cloud spring-cloud-starter-bootstrap3.1.0
创建 bootstrap.properties 文件
spring.application.name=应用名称 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
在注册中心心中新建 应用名称.properties 的配置文件,并添加配置
加入 @RefreshScope 和 @Value("${xx.xx}") 即可动态获取配置
命名空间默认 public
开发、测试、生产 需要命名空间做环境隔离
在 bootstrap.properties 中配置命名空间
spring.cloud.nacos.config.namespace=aab3884f-5260-4155-a725-d90d474b67f8
每个微服务之间互相隔离配置,每个微服务都创建自己的命名空间,只加载自己命名空间下的配置
可以将配置文件分散成各个小的配置然后整体加载
spring.cloud.nacos.config.namespace=80ef2691-2c21-49e5-b272-7c0c9c067f18 spring.cloud.nacos.config.group=dev spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yaml spring.cloud.nacos.config.extension-configs[0].group=dev spring.cloud.nacos.config.extension-configs[0].refresh=true spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yaml spring.cloud.nacos.config.extension-configs[1].group=dev spring.cloud.nacos.config.extension-configs[1].refresh=true spring.cloud.nacos.config.extension-configs[2].data-id=other.yaml spring.cloud.nacos.config.extension-configs[2].group=dev spring.cloud.nacos.config.extension-configs[2].refresh=trueGateway 网关
依赖
org.springframework.cloud spring-cloud-starter-gateway
由于网关无需数据库链接,所以在启动项上排除
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, IdentifierGeneratorAutoConfiguration.class})
网关也需要加入到注册和配置中心
路由:网关的基本构建块。它由 ID、目标 URI、谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。 断言:这是一个Java 8 函数谓词。输入类型是Spring FrameworkServerWebExchange。这使您可以匹配来自 HTTP 请求的任何内容,例如标头或参数。 过滤器GatewayFilter:这些是使用特定工厂构建的实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。
参考官方文档:
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/
var let cons t区别
解构赋值
//数组解构 let arr = [1,2,3]; let[a,b,c] = arr; console.log(a,b,c) //1 2 3
//对象解构
const person = {
name:"jack",
age:18,
language:['java','c','js']
}
const {name:abc,age,language} = person;
console.log(abc,age,language)
//不定参数
function fun(...values){
console.log(values.length)
}
fun(1,2) // 2
fun(1,2,3,4,5) // 5
//箭头函数
之前方法的声明
var print = function(obj){
console.log(obj);
}
改造:
var print = obj => console.log(obj);
print("word"); // word
==================
var sum = function(a,b){
return a + b;
}
改造:
var sum = (a,b) => a + b;
console.log(sum(1,2)) // 3
==================
var sum = function(a,b){
c = a + b;
return a + c;
}
改造:
var sum = (a,b) => {
c = a + b;
return a + c;
}
console.log(sum(1,2)) // 3
const person = {
name:"tom",
age:18
}
function hello(){
console.log("hello" + person.name)
}
var hello2 = ({name}) => console.log("hello" + name);
hello2(person); // tom
const target = {a:1};
const source1 = {b:2};
const source2 = {c:3};
Object.assign(target,source1,source2);
console.log(target);//{a:1,b:2,c:3}
1.拷贝对象(深拷贝)
let pserson = {name:"迪丽热巴",age:18}
let someone = {...pserson}
console.log(someone) //{name:"迪丽热巴",age:18}
2.合并对象
let age = {age:15}
let name = {name:"tom"}
let person = {...age,...name}
console.log(pserson) // {age:15,name:"tom"}
vue模板
{
"生成 vue 模板": {
"prefix": "vue",
"body": [
"",
"",
"",
"",
"",
""
],
"description": "生成 vue 模板"
}
}



