CentOS7如何禁止IPv6

编辑文件/etc/sysctl.conf
vi /etc/sysctl.conf

添加下面的行:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

如果你想要为特定的网卡禁止IPv6,比如,对于enp0s3,添加下面的行。
net.ipv6.conf.enp0s3.disable_ipv6 = 1

保存并退出文件。

编辑/etc/sysconfig/network配置,增加 NETWORKING_IPV6=no,保存并退出
[root@ds-163 /]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING_IPV6=no

编辑/etc/sysconfig/network-scripts/ifcfg-enp0s3,确保IPV6INIT=no,ifcfg-enp0s3是根据自己机器的实际网卡信息
[root@ds-163 network-scripts]# cat ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=336b6df7-4ee8-4f61-bfeb-1aa74da7da6b
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.0.163
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.1
IPV6_PRIVACY=no
ZONE=public

[root@ds-163 network-scripts]# cat ifcfg-docker0
DEVICE=docker0
STP=no
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=172.17.0.1
PREFIX=16
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV4_DNS_PRIORITY=100
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPV6_DNS_PRIORITY=100
NAME=docker0
UUID=0177b883-58c8-49ae-adaf-a50427e83f74
ONBOOT=no
ZONE=trusted

执行下面的命令来使设置生效。
sysctl -p

禁止IPv6后遇到问题:

 

centos7的systemctl服务存贮目录和常用列表命令

systemctl服务主体存贮目录:
/usr/lib/systemd/system/

systemctl服务开机启动链接存贮目录:
/etc/systemd/system/basic.target.wants/

列出所有开机自启的服务
systemctl list-unit-files | grep enabled

列出防火墙服务的自启状态
systemctl list-unit-files | grep firewalld

列出所有服务的层级和依赖关系,可以指定某个服务
systemctl list-dependencies [服务名称]

删除docker images/containers方法

docker images生成过多,经常会占满硬盘空间,需要定时删除冗余image文件。清理的时候一般以root权限处理。

一般命令如下:

停止所有container,为删除images作准备:
docker stop $(docker ps -a -q)

如果想要删除所有container,如下指令:
docker rm $(docker ps -a -q)

这里docker ps 的命令包括:
1)-a 列出所有容器
2)-l 列出最新创建容器
3)-n=2 列出最近创建的2个容器
4)-q 仅列出容器ID
5)-s 显示容器大小
所以docker ps -aq 相当于列出所有的容器ID,然后docker rm 删除

查看当前有些什么images
docker images

要删除images,通过image的id来指定删除:
docker rmi <image id>

要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep “^<none>” | awk “{print $3}”)

docker rmi $(docker images -a|grep none|awk ‘{print $3}’)
docker ps -a | grep none | awk ‘{print $1}’ | xargs docker rmi

要删除全部image的话
docker rmi $(docker images -q)

docker build 或是 pull 命令就会产生临时镜像。如果我们用dockerfile创建一个镜像后,因为版本更新需要重新创建,那么以前那个版本的镜像就会成为临时镜像。这个是需要删除的。删除命令见下。
docker rmi $(docker images -f “dangling=true” -q)

尝试使用新的镜像,对原来的镜像进行删除,报错如下:
Error response from daemon: conflict: unable to delete XXXXXXXXXX (must be forced) – image is being used by stopped container XXXXXXXXXX

意思就是在删除镜像之前,要先删除对应的docker。因为该image被对应的container引用,所以image删除失败。

# docker images

希望删除imgae,根据image的id到container中找 # docker ps -a,通过删除CONTAINER ID它们。
docker rm XXXXXXXXX

再删除镜像,# docker rmi XXXXXX

也可以根据提示来的,加-f强制删除镜像。

 

Docker容器的重启策略

Docker容器的重启策略

Docker容器的重启策略是面向生产环境的启动策略,一般在开发过程中根据需要使用策略。Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。
Docker容器的重启策略如下:
no:默认策略,在容器退出时不重启容器
on-failure:在容器非正常退出时(退出状态非0)重启容器
on-failure:在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

Docker容器的退出状态码

docker run的退出状态码如下:
0:表示正常退出
非0,表示异常退出(退出状态码采用chroot标准)
125:Docker守护进程本身的错误
126:容器启动后,要执行的默认命令无法调用
127:容器启动后,要执行的默认命令不存在
其他命令状态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码

docker run的–restart选项

通过–restart选项,可以设置容器的重启策略,以决定在容器退出时Docker守护进程是否重启刚刚退出的容器。
–restart选项通常只用于detached模式的容器。

–restart选项不能与–rm选项同时使用。显然,–restart选项适用于detached模式的容器,而–rm选项适用于foreground模式的容器。

在docker ps查看容器时,对于使用了–restart选项的容器,其可能的状态只有Up或Restarting两种状态。

docker run -d –restart=always uenta-config-server
docker run -d –restart=on-failure:10 uenta-config-server

查看容器重启次数
docker inspect -f “{{ .RestartCount }}” uenta-config-server

查看容器最后一次的启动时间
docker inspect -f “{{ .State.StartedAt }}” uenta-config-server

参考链接:https://docs.docker.com/engine/reference/run/

 

 

Docker基本操作

Docker命令基本分一下几种:

容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]

获取镜像:docker pull centos
查找镜像:docker search centos
查看镜像:docker images
删除镜像:docker rmi centos,也可以用id,取前几位就行。
创建镜像:docker commit CONTAINER self:centos CONTAINER为容器id
导出镜像:docker export xxxid > xxx.tar
导入镜像:docker import xxx.tar test/centos

创建容器:docker create centos
启动容器:docker run centos
查看容器:docker ps -a
停止容器:docker stop xxxid
进入容器:docker attach xxxid
删除容器:docker rm xxxid

命令都有很多参数,详细的可以看官方文档。也可以直接在命令后面–help。

例子

启动容器,输出hello world:docker run centos /bin/echo ‘Hello world’
启动容器,进入容器bash终端:docker run -t -i centos /bin/bash
启动容器,守护态运行:docker run -d centos /bin/bash
启动容器,守护态运行,把本地80端口映射到容器81端口:docker run -p 80:81 -d centos /bin/bash

 

 

 

 

mybatis xml中的if else

mybaits中没有else要用chose when otherwise 代替,其中choose为一个整体,when是if,otherwise是else。


<!--批量插入用户-->
<insert id="insertBusinessUserList" parameterType="java.util.List">
    insert into `business_user` (`id`, `user_type` , `user_login` )
    values
    <foreach collection="list" index="index" item="item" separator=",">
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <choose>
                <when test="item.id != null and item.id !=''">
                    #{item.id,jdbcType=CHAR},
                </when>
                <otherwise>
                    '',
                </otherwise>
            </choose>
            <choose>
                <when test="item.userType != null and item.userType !=''">
                    #{item.userType,jdbcType=VARCHAR},
                </when>
                <otherwise>
                    '',
                </otherwise>
            </choose>
        </trim>
    </foreach>
</insert>

maven 项目出现 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

解决方法1:

严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

还有一个原因是,项目不是maven项目,我这个之前是普通的web项目,只是加上了一个pom.xml而已
需要修改的有两个地方
1.项目根目录下的.project文件,用记事本打开,加入以下代码(把原来的节点和替换了):


  <buildSpec>
    <buildCommand>
      <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
      <arguments>
      </arguments>
    </buildCommand>
    <buildCommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
      <arguments>
      </arguments>
    </buildCommand>
    <buildCommand>
      <name>org.eclipse.wst.common.project.facet.core.builder</name>
      <arguments>
      </arguments>
    </buildCommand>
    <buildCommand>
      <name>org.eclipse.wst.validation.validationbuilder</name>
      <arguments>
      </arguments>
    </buildCommand>
    <buildCommand>
      <name>org.eclipse.m2e.core.maven2Builder</name>
      <arguments>
      </arguments>
    </buildCommand>
    <buildCommand>
      <name>org.maven.ide.eclipse.maven2Builder</name>
      <arguments>
      </arguments>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.maven.ide.eclipse.maven2Nature</nature>
    <nature>org.eclipse.m2e.core.maven2Nature</nature>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
  </natures>

2.项目根目录下的.classpath,找到

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>

替换为:

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
  <attributes>
    <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
  </attributes>
</classpathentry>

新增加一个classpathentry节点:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
  <attributes>
    <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
  </attributes>
</classpathentry>

OK,到这一步已经完成了,到eclipse中刷新项目,然后重新启动tomcat,错误已经解决!

解决方法2:
设置一下eclipse:
项目 —> properties -> Deployment Assembly -> Add -> Java Build Path Entries -> 选择Maven Dependencies -> Finish -> OK
把对应的Maven依赖包也发布到tomcat,调试时会自动把那些jar发布到指定目录下,tomcat也能找到那些jar了。

一张纸整理术

在《在TOYOTA学到的只要纸1张的整理技术》中讲述了怎么用一张纸整理自己的思路,这是一本不错的书,值得推荐。

适合的场景

  • 工作清单
  • 会议记录
  • 市场分析
  • 新商品策划

一张纸文件的共通点

  • 目的
  • 现状
  • 课题
  • 对策
  • 日程

如果做过日本项目,估计都写过调查报告,以上的共通点就是向客户报告的内容,也是一张纸魅力。

如何用一张纸进行整理
1) 思考用的基础信息整理到文件内
2) 整理自己的思路、归纳到文件内
3) 整理文件内容要传达、沟通的对象

讲概念需要的内容
What:这个概念是什么,听众想听什么
Why:这个概念的目的是什么,有什么好处
How:这个概念如何用到我的工作或生活中

为什么一张纸这么有效

这种方式有效地帮助我们进行了思路的分类,主要三步:

1) 收集整理数据
这个步骤做的事情是发散,头脑风暴。
目的是记录脑子里出现的所有和目的或主题相关的词。

2) 思考、归纳、找出联系
这步做的是思考。在收集整理数据的基础上,审视已有关键词,找出它们的联系,进行深度思考。

3) 做出决策
最后基于上面的思考,进行最后的决策。

–以上–