Vue中表单更新取消操作的注意事项

坑:今天写了一个更新操作的表单,但是当取消操作时,表中的原有数据被污染了,很纳闷。

原因:后来知道赋值操作的时候把地址给共同绑定了,这也是一个js的基础问题,对象等赋值数据类型的值和址应用等知识点。

解决策略

1
2
3
4
5
editHandel(row){
let copy = Object.assign({}, row)
this.$refs.infoEdit.editDialogVisible = true
this.$refs.infoEdit.editForm = copy
},

主要利用了 Object.assign({}, xxx) 方法。

Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。不会引用原地址。不会修改到原来的内容。


Docker常用命令整理

Docker部署jar包运行

方式一:

1-上传jar到服务器的指定目录

2-在该目录下创建Dockerfile 文件

1
2
3
4
5
FROM java:8
MAINTAINER laiqiaobo
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]
  • from java:8 拉取一个jdk为1.8的docker image

  • maintainer 作者是laiqiaobo

  • demo-0.0.1-SNAPSHOT.jar就是你上传的jar包,替换为jar包的名称

  • demo.jar 是你将该jar包重新命名为什么名称,在容器中运行

  • expose 该容器暴露的端口是多少,就是jar在容器中以多少端口运行

  • entrypoint 容器启动之后执行的命令,java -jar demo.jar 即启动jar

3-创建好Dockerfile文件之后,执行命令 构建镜像:

1
2
// 注意最后的 `.`  表示 Dockerfile 文件在当前目录下 abc是构建之后镜像名称
docker build -t abc .

4-镜像构建成功之后,就可以运行容器了

1
2
3
docker run -d --restart=always --name demo -p 8080:8080 abc
这个表示docker容器在停止或服务器开机之后会自动重新启动
--restart=always -p 宿主端口:容器端口

方式二

运行一个jdk的容器,然后挂载其中的目录到宿主机,然后运行之后,就可以将需要运行的jar放在宿主机的挂载目录下,然后每次重新运行docker容器即可。每次发布只需要替换宿主机中的jar包即可。

1-准备 jdk1.8的镜像

2-构建容器, 并映射本地目录

1
2
3
4
5
docker run -d --restart=always -v /C/develop/server:/jar  -p 8000:8001 --name=cdemo   primetoninc/jdk:1.8 java -jar -Duser.timezone=GMT+08 /jar/mybatis.jar

-v 宿主机目录:docker中的目录,在win10下 /C/代表c盘
primetoninc/jdk:1.8 镜像名:版本号
java -jar -Duser.timezone=GMT+08 /jar/mybatis.jar 启动命令

常用命令

1
2
3
4
5
6
7
8
9
10
docker ps     // 查看运行中的容器
docker ps -a // 查看所有容器
docker rm xxx // 删除名为xxx的容器
docker start xxx // 启动xxx容器
docker stop xxx // 停止容器
docker stats 命令查看实际情况
docker exec -it bfc6039f87f7 /bin/bash //进入某个容器内部

// 修改容器的可用内存大小
docker update -m 300m --memory-swap 1g bfc6039f87f7

参数解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-d: 后台运行容器,并返回容器ID;
--name="nginx-lb": 为容器指定一个名称;
-p: 指定端口映射 主机端口:容器端口
-m :设置容器使用内存最大值,例如: -m 1g 或者 -m 300M
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--memory="300m" --memory-swap="1g" 代表可使用内存300m,memory-swap为1g
-m 300M --memory-swap -1 代表可使用内存300m,memory-swap为不设上限,
如果值相同,则不能使用swap

docker run 或者 docker update
--cpuset-cpus="" # 允许使用的 CPU 集合
例:--cpuset-cpus "0,6" --cpuset-cpus "0-5"
-c,--cpu-shares=0 # CPU 共享权值(相对权重)
--cpu-period=0 # 限制 CPU CFS 的周期,范围从 100ms~1s,即[1000, 1000000]
即调度周期,多久重新分配一次cpu
--cpu-quota=0 # 限制 CPU CFS 配额,必须不小于1ms,即 >= 1000
设置在每个周期内容器能使用的 CPU 时间。例如:4核cpu中,调度1s, 配额2s,相当于用50%cpu
设置容器在一个调度周期内能使用的 CPU 时间时实际上设置的是一个上限。并不是说容器一定会使用这么长的 CPU 时间。
--cpuset-mems="" # 允许在上执行的内存节点(MEMs),只对 NUMA 架构有效

docker run 和 docker start 区别

  • docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。 相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

  • docker start的作用是,重新启动已存在的镜像,可以使用docker ps找到容器的信息。

开启阿里云加速

docker的镜像仓库在国外,下载会很慢,启用阿里云加速。

/etc/docker目录下创建daemon.json文件,添加如下内容

1
2
3
{
"registry-mirrors": ["https://almtd3fa.mirror.aliyuncs.com"]
}

https://almtd3fa.mirror.aliyuncs.com 为阿里云的加速地址。修改后,重启docker:

1
2
systemctl daemon-reload
service docker restart

SpringMVC之@RequestMapping注解中produces以及consumes属性

http协议基础知识

首先需要了解什么叫MediaType(媒体类型)?

通俗来说,在http协议中,用来表示传输内容的格式就是MediaType,比如text/html,application/json等,其中text代表介质,html代表格式

也就是经过http协议通信的双方,比如客户端和浏览器,要彼此告诉对方自己发送的内容是什么格式,期望获取的结果是什么格式

这两个功能是通过http header中的Content-Type头部和Accept头部来体现的

@RequestMapping对这两个头部的使用

而在springmvc @RequestMapping注解,其提供了根据MediaType进行过滤的功能,仅当Content-Type或Accept头部带有某些MediaType的时候,其才会进行映射

produces()属性

其功能有两个

  • 功能1:当请求头中Accept的value与produces()配置的属性匹配上,则进行映射,否则返回客户端HTTP 406(Not Acceptable)响应,或415 unsupported mediaType

  • 功能2:默认会把produces中配置的内容写到响应头的Content-Type中去

例1:当不配置produces()属性的时候,会根据Accept请求头来输出响应头的Content-Type

例2:当配置produces()属性的时候,需要Accept与配置的属性兼容,否则会抛出406或415异常

例3:当配置produces()属性的时候,如果未设置Accept请求头,那么默认就是/,会根据produces属性来输出响应头的Content-Type

consumes()属性

consumes属性的工作方式类似于produces,不过它会关注请求的ContentType头部信息。当请求头中Content-Type的value与consumes()配置的属性匹配上,则进行映射,否则415 unsupported mediaType