在idea中显示springboot面板的方法
添加如下配置,重启IDEA
<component name="RunDashboard">
<option name="configurationTypes">
<set>
<option value="SpringBootApplicationConfigurationType" />
</set>
</option>
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
版本控制
在 .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 -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
解释: -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
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
nacos(注册中心)
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
启动方式 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(声明式的远程调用)
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
由于Spring Cloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错.
解决方法:
加入spring-cloud-loadbalancer依赖 并且在nacos中排除ribbon依赖,不然loadbalancer无效
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- LoadBalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.3</version>
</dependency>
在需要调用远程的服务的启动类上添加
@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(配置中心)
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dependency>
创建 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=true
Gateway 网关
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
由于网关无需数据库链接,所以在启动项上排除
@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/
ES6
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": [
"<template>",
"<div></div>",
"</template>",
"",
"<script>",
"//这里可以导入其他文件(比如:组件,工具 js,第三方插件 js,json文件,图片文件等等)",
"//例如:import 《组件名称》 from '《组件路径》';",
"",
"export default {",
"//import 引入的组件需要注入到对象中才能使用",
"components: {},",
"props: {},",
"data() {",
"//这里存放数据",
"return {",
"",
"};",
"},",
"//计算属性 类似于 data 概念",
"computed: {},",
"//监控 data 中的数据变化",
"watch: {},",
"//方法集合",
"methods: {",
"",
"},",
"//生命周期 - 创建完成(可以访问当前 this 实例)",
"created() {",
"",
"},",
"//生命周期 - 挂载完成(可以访问 DOM 元素)",
"mounted() {",
"",
"},",
"beforeCreate() {}, //生命周期 - 创建之前",
"beforeMount() {}, //生命周期 - 挂载之前",
"beforeUpdate() {}, //生命周期 - 更新之前",
"updated() {}, //生命周期 - 更新之后",
"beforeDestroy() {}, //生命周期 - 销毁之前",
"destroyed() {}, //生命周期 - 销毁完成",
"activated() {}, //如果页面有 keep-alive 缓存功能,这个函数会触发",
"}",
"</script>",
"<style scoped>",
"/* @import url($3); 引入公共 css 类 */",
"$4",
"</style>"
],
"description": "生成 vue 模板"
}
}