使用aliyun的maven仓库初始化gradle

在linux中使用gradle命令行构建程序时,使用国内镜像可以大大加快我们的构建过程,节约我们的时间,下面就如何配置aliyun仓库作为gradle的默认仓库作出说明。

  1. 如果只想对单个项目生效,那么可以在项目的build.gradle中添加如下配置:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    buildscript {
    repositories {
    maven {url 'https://maven.aliyun.com/repository/google/'}
    maven {url 'https://maven.aliyun.com/repository/jcenter/'}
    }
    dependencies {
    classpath: 'com.android.tools.build:gradle:2.2.3'

    }
    }
    allprojects {
    repositories {
    maven { url 'https://maven.aliyun.com/repository/google/' }
    maven { url 'https://maven.aliyun.com/repository/jcenter/'}
    }
    }
  2. 如果是对所有项目生效,那么需要在用户的家目录下面的.gradle目录下创建init.gradle文件,内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    allprojects{
    repositories {
    def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
    def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/'
    def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
    def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
    all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
    remove repo
    }
    if (url.startsWith('https://jcenter.bintray.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
    remove repo
    }
    if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
    remove repo
    }
    if (url.startsWith('https://plugins.gradle.org/m2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
    remove repo
    }
    }
    }
    maven { url ALIYUN_REPOSITORY_URL }
    maven { url ALIYUN_JCENTER_URL }
    maven { url ALIYUN_GOOGLE_URL }
    maven { url ALIYUN_GRADLE_PLUGIN_URL }
    }
    }

spring实战

认识spring框架

  1. spring框架为开发者做了很多,反过来,它也要求开发者同样对它。

bash中的常用快捷方式

alt为辅助键的快捷键

  1. alt+A 跳转到行首
  2. alt+B 跳转到光标后面一个单词长度的位置
  3. alt+C 中断bash中正在执行的任务
  4. alt+D 删除位于光标后面的所有字符
  5. alt+F 移动到光标前面一个单词长度的位置
  6. alt+T 交换光标位置前后的两个单词的位置
  7. alt+U 将位于光标位置后面的第一个单词全部转换成大写字母
  8. alt+L 和alt+U相反,将位于光标位置后面的第一个单词全部转换成小写字母
  9. alt+R 撤销当前命令所有的改变(等同于清空当前所有手动输入过的字符)
  10. alt+. 使用上一个命令的最后一个单词(以空格来区分)

ctrl为辅助键的快捷键

  1. ctrl+A 移动到行首
  2. ctrl+B 向光标后面移动一个字符
  3. ctrl+C 终止正在执行的任务
  4. ctrl+D 向光标后面删除一个字符
  5. ctrl+E 移动到行尾
  6. ctrl+H 删除光标前面的一个字符,相当于退格键
  7. ctrl+J 相当于enter
  8. ctrl+K 删除所有位于光标后面的字符
  9. ctrl+L 清空屏幕
  10. ctrl+R 查询历史命令
  11. ctrl+O 执行ctrl+R查询出来的命令
  12. ctrl+T 交换最后两个字符
  13. ctrl+U 删除位于光标位置前的字符
  14. ctrl+W 删除光标位置前的一个单词

其他

  1. !! 重复执行上一条命令
  2. ESC+T 交换最后两个单词的位置

gzip操作手册

gzip工具

gzip采用了最流行的压缩算法,可以让你缩小文件的大小,并且保留原始的文件模式,属主和时间戳。
使用gzip工具压缩的文件一般使用.gz的文件名后缀,并且gzip也可以用来解压缩文件。

命令格式以及说明

通常的语法格式如下:

1
gzip [可选项] ... [文件]...

gzip只能压缩单个文件,并为给定的文件创建一个压缩之后的文件。根据惯例,压缩之后的文件的命令一把使用.gz或者.z
如果你想将多个文件或者目录压缩到一个文件中,首先你需要创建一个tar包,然后对这个tar包进行压缩。这样的文件一般会使用.tar.gz或者.tgz作为后缀来表明这个文件是使用了gzip压缩之后的tar包。
gzip最常用作压缩文本文件,tar包或者网页,尽量不要使用gzip去压缩图片,音频,pdf文档或者其他的二进制文件,因为他们已经被压缩过了。
gzip只能压缩常规文件,符号链接文件会被忽略。

使用gzip压缩文件

  • 不带任何参数的压缩
    1
    gzip 你的文件
    该命令将会创建一个你的文件.gz文件,然后删除原始文件。
    默认情况下,gzip会保留原始文件的时间戳,模式,属主和文件名。
  • 保留原始文件
    1
    gzip -k 你的文件
    另外一种保留原始文件的方法是使用-c选项,告诉gzip将原始文件写入到标准输出,然后重定向到指定的文件
    1
    gzip -c 你的文件 > 你的文件.gz
  • 查看冗余信息
    1
    gzip -v 你的文件
    该命令将会输出压缩进度信息
  • 压缩多个文件
    1
    gzip 文件1 文件2 文件3
    该命令将会生成文件1.gz文件2.gz文件3.gz这3个文件。
  • 压缩目录
    1
    gzip -r 你的目录
    该命令会递归压缩你的目录下的所有文件,分别生成.gz文件。
  • 改变压缩等级
    gzip允许我们指定文件的压缩等级,范围是1-9,而-1或者--fast则代表使用最小的压缩率以达到最快的压缩速度;而-9或者--best则代表使用最高的压缩率,相应的,也会有最慢的压缩速度。默认的压缩级别是6;
    1
    gzip -9 你的文件
    压缩是CPU密集型的任务,压缩等级越高,压缩过程越长。
  • 使用标准输入
    为了从标准输入创建.gz文件,使用管道命令重定向到gzip。
    1
    mysqldump database_name | gzip -c > database_name.sql.gz
    该命令将会把mysqldump的输出内容作为输入传递给gzip。

使用gzip解压缩

  • 使用-d作为解压缩选项
    1
    gzip -d 你的文件.gz
    另一个可以用于解压缩的命令是gunzip,它可以算作是gzip -d的别名。
    1
    gunzip 你的文件.gz
  • 保留原始压缩文件
    1
    gzip -dk 你的文件.gz
  • 解压缩多个文件
    1
    gzip -d 你的文件1.gz 你的文件2.gz 你的文件3.gz
  • 解压缩目录下的所有压缩文件
    1
    gzip -dr 你的目录
  • 查看压缩文件的内容
    1
    gzip -l 你的文件
    使用-v可以得到更加详细的信息。

设计模式学习手册

设计模式的类别

  • 创造性模式(creational)

    创造型模式控制了对象的创建和类的实例化;

  • 结构性模式(structural)

    结构型设计模式控制了类和对象之间的关系

  • 表现型模式(behavioral)

    表现型设计模式控制了对象之间的交流和交互

    设计模式带来的影响范围——确定了解决方案的关注点

  • 对象层面的影响范围——解决对象关系的问题
    作用于运行期间,对象拥有动态的行为
  • 类层面的影响范围——解决类关系的问题
    作用于编译期间,类拥有静态的行为

docker使用手冊

启动docker实例

1
sudo docker start 你的镜像名称

关闭docker实例

1
sudo docker stop 你的镜像名称

查看所有的本地镜像

1
sudo docker ps -a

或者带上选项q则只会列出容器id(类似369a959e3402)

查看指定命令的帮助手册(有哪些可用选项)

1
docker 你的命令 --help

安装镜像

1
docker pull 镜像名

安装并启动镜像

1
docker run -it --name <容器名称> --hostname <容器主机名> -p 15672:15672 -p 5672:5672 镜像名称

注意,该命令会先在本地查找镜像是否已经存在,如果不存在,则从远程仓库下载,并创建该镜像的一个实例。其中,–name用来指定被创建容器的名称,–hostname被用来指定被创建容器的主机名,-p被用来映射容器端口和本地运行环境端口,最后的镜像名称为远程仓库中已存在的镜像名;-it,其中的i表示交互式运行,t表示开启一个伪终端。

删除指定的容器实例

1
docker rm 容器名称或者容器id

挂载本地目录,并映射到容器内的存储目录

1
docker run -it --name mongo -v /mongodb/data/db:/data/db -p 27017:27017 -d mongo:latest

该命令使用-v选项(volumn)将本地目录/mongodb/data/db挂载到容器内的目录/data/db,并使用-d选项将容器实例以后台进程的形式运行。

进入容器实例内部

1
docker exec -it mongodb bash

该命令会开启一个新的bash shell,而该bash shell对应的是容器内的环境。

linux下使用crontab工具设置定时任务

使用crontab添加定时任务

crontab -e

cron的格式说明

分钟 小时 月中日 月份 周中日 你的自动化脚本
取值范围:
分钟:0-59
小时:0-23
月中日:1-31
月份:1-12
周中日:0-6

在指定的时间点调度

30 08 10 12 * /home/pengkai/myjob.sh
上面的调度器会在12月10号的上午8点30分执行myjob.sh脚本。
注意,上面最后一个位置使用了*号来表示一周中的每一天。因为已经指定了具体的月日,所以不必再限制那一天是星期几。

查看当前用户下的所有调度任务

1
$ crontab -l

或者以root用户查看其他用户的任务

1
# crontab -u kyle -l

每分钟执行一次调度

1
* * * * * 你的脚本

一天执行两次

1
* 12,20 * * * 你的脚本

上面的命令会分别在中午12点晚上8点执行你的脚本

指定起止时间并按照固定间隔执行

1
08-20 * * * 你的脚本

上面的命令会从8点开始执行,然后间隔一个小时再次执行,最后一直到晚上8点截止。

只在工作日的工作时间内执行

1
00 09-18 * * 1-5 你的脚本

从周一开始,每天从上午9点开始执行,然后每隔一个小时再次执行,最后一直到下午6点截止。如此往复到周五晚上6点停止执行。下周继续。

每隔10分钟执行一次

1
*/10 * * * * 你的脚本

使用特殊字符指定调度周期

cron支持的特殊字符
@yearly = 0 0 1 1 * :每年的1月1日执行
@daily = 0 0 * * * : 每天的0点执行
@monthly = 0 0 1 * * :每个月的1号的0点执行
@hourly = 0 * * * * :每个小时执行一次
@reboot = 计算器启动时执行

在docker中使用mysql

什么是容器

容器是一种标准化的软件单元,它允许开发者将他们的应用的执行环境和机器环境隔离开来,可以解决类似”它在我机器上工作的好好的“的抱怨。而Docker是目前容器领域的实际标准。

Docker的另外一个重要的用途是开发者可以下载并运行任何容器化的应用,而不用在他们的本地安装。因此很多应用都实现了容器化版本。

FormattingConversionService类的使用

它是什么

Spring MVC框架中用来解析方法参数的service类。

它有什么用

当我们在Spring的配置文件中添加时,如果我们没有明确指定conversion-service属性的值,那么Spring MVC框架会自动使用默认的FormattingConversionService类,它包含了常用的转换方法,将字段转换成标准的JDK类型,另外,如果我们需要date/time的转换器,可以在类路径下引入Joda Time的时间库,它会被默认识别。

使用场合

如果我们不需要在字段绑定期间使用自定义的类型转换器,那么我们完全可以使用默认的类。

如果我们需要自定义格式转换器类的话,我们可以继承该类,并将注解中conversion-service属性的值设为我们自己的类(使用类路径引入)。

如果使用的是SpringBoot自动装配的话,则需要在自定义的类上加上@Configuration注解,并使用DateTimeFormatterRegistrar注册器注册我们自定义的日期解析器。然后使用@Autowired添加到Spring容器中。

springmvc注解学习

annotation-driven

配置注解驱动的Spring MVC控制器编程模型。

可选参数:

  • conversion-service:指定字段转换服务
  • validator:指定自定义的校验类,用来校验控制器中的model对象,默认使用JSR-303校验

resources

配置静态资源的处理器,比如说图片、js、css,通过对缓存头进行优化,提升浏览器的加载速度。允许Spring资源处理器能够识别任何指定路径下的静态资源。

可选参数:

  • mapping:必须,指定URL的映射方式,基于当前的Servlet上下文,比如/resources/**则表示需要在url中加上resources,然后追加静态资源相对于根路经的目录结构路径。
  • location:必须,指定静态资源的物理路径,多个路径可以使用逗号隔开,放在前面的会被优先读取(如果有两个同名的文件,会优先读取放在前面的路径下的文件),例如:/,classpath:/META-INF/public-web-resources/,将会读取位于web应用根路径下的静态资源以及类路径下的所有Jar包中/META-INF/public-web-resources目录下的文件,而web应用根路径下的文件优先级更高。
  • cache-period:可选,指定静态资源的缓存策略。以秒为单位。默认情况下不会发送任何缓存头,而是取决于文件上次修改的时间戳。如果将该属性的值设为0,则会发送值为prevent-cacheing的缓存头。如果是大于0的值,则会发送max-age为该值的缓存头。
  • order:可选,指定资源处理器的顺序。

default-servlet-handler

用来配置处理静态资源的处理器(handler),通过将请求重定向到容器默认的servlet。使用这个处理器允许/映射与DispatcherServlet一起使用,同时仍利用Servlet容器提供静态资源服务。

可用属性:

  • default-servlet-name:可以重定向客户端静态资源请求的默认Servlet。默认的处理器在启动时会自动检测容器默认的Servlet(通过一个预定义的名字列表)。只有在默认但Servlet无法被检测到的情况下,才需要明确指定默认Servlet的名字。

  • interceptors:注册自定义的拦截器(父标签)

    • interceptor:自定义拦截器必须继承HandlerInterceptor类或者实现WebRequestInterceptor接口。

      可用属性

      • mapping:
        • path:指定被拦截的url路径,例如/myPath或者/myPath/**
        • ref:指定bean的引用。

view-controller

用来定义渲染返回视图的简单控制器

可用属性:

  • path:必须。被映射的URL路径。
  • view-name:可选。被渲染的视图名,如果不指定,则通过当前HttpServletRequest对应的DispatcherServlet的RequestToViewNameTranslator来决定。