主页

swagger2的使用

一、简介

快速构建REST APIs文档,免去了手动写API的繁琐,国内的工具有RAP,阿里出品的。

swagger官方文档

先在要把它整合到spring当中,使用springfox-swagger2工具,它是从swagger-springmvc上发展出来的。

阅读更多

使用Redis做分布式锁

一、描述

在单机环境下,想要某个资源同一时间只能一个人修改,加个synchronized就可以。但现在很多网站都是分布式部署的,就没有这么简单了,分布式场景中的数据一致性问题是很重要的。

分布式的CAP理论:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)
最多只能同时满足两项。绝大多数会牺牲强一致性来换取系统的高可用性,往往只保证“最终一致性”,最终时间在用户可以接受的范围内即可。

分布式锁至少要确保锁的实现同时满足以下三个条件:
1.安全属性: 相互排斥。在任意一个时刻,只有一个客户端持有锁,加锁和解锁都必须是同一个客户端。
2.活性A: 无死锁。即便持有锁的客户端崩溃或者网络故障,锁仍然可以被获取。
3.活性B: 容错。只要大部分Redis节点都活着,客户端就可以获取和释放锁。

阅读更多

Linux常用配置

近期虚拟机由Vmware换到了Hyper-V,虚拟机系统(CentOS7)重新装了,把一些配置记录一下。

网络配置

相关的主要的几个配置文件为:

配置主机名(域名)和IP地址的对应
/ect/hosts

配置主机名
/etc/hostname

配置主机名和网关
/etc/sysconfig/network

网卡配置文件,网卡名为eth0则配置文件名为ifcfg-eth0,以此类推 /etc/sysconfig/network-scripts/ifcfg-eth0

配置DNS客户端(关于使用哪个DNS服务器的配置)
/etc/resolv.conf

# 查看网络
ip a

# 启动指定网卡
ifup eth0

# 编辑网卡配置文件,文件名是和网卡名对上的
vi /etc/sysconfig/network-scripts/ifcfg-eth0

阅读更多

Linux下安装MySql8

一、安装

1.安装yum源,https://dev.mysql.com/downloads/repo/yum/,下载安装即可,也可以用以下命令下载

# 下载rpm安装包
curl https://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm -o /tmp/mysql80-community-release-el7-1.noarch.rpm

# 安装yum源
rpm -ivh mysql80-community-release-el7-1.noarch.rpm

2.安装mysql

# 安装mysql
yum install mysql-community-server -y

# 开启服务
systemctl start mysqld.service

# 开机自启动
systemctl enable mysqld.service

# 查看端口
netstat -ln | grep 3306

阅读更多

Spring Schedule 任务调度

一、简介

Spring官方提供的用于定时任务的框架,通常使用Cron表达式(CronTrigger)来触发定时任务

Spring Scheduler里有两个概念:任务(Task)和运行任务的框架(TaskExecutor/TaskScheduler)

1.TaskExecutor任务执行器,异步执行多个任务

2.TaskScheduler任务调度器,运行定时任务

Spring内置了多种类型的TaskExecutor和TaskScheduler,方便用户根据不同业务场景选择。

阅读更多

Spring Session的使用

一、简介

方便的解决集群环境下Session共享问题,对业务代码没有入侵

二、使用

在web工程中pom.xml引入jar包,这里使用Redis环境

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

配置web.xml文件

阅读更多

集群环境下的Session共享

一、一些概念

1.HTTP协议的无状态性:

每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录

2.Request(请求):

指客户端向服务器发送的信息,通常是通信的发起方

3.Response(响应):

指服务器对请求的应答,通常是通信的回复方

4.Session(会话):

客户端第一次访问服务器,服务器会开辟一块空间创建Session对象,并为这次Session对象生成唯一标识符SessionId,用来表示这次会话,并通过响应头的Set-Cookie:“JSESSIONID=XXXXXXX”向客户端发送要求设置Cookie的Response,接下来客户端每次发送请求时,请求头都会带上SessionID,这样就弥补HTTP的无状态特性

5.Cookie

客户端保存在本地的数据,SessionId就储存在Cookie

PS:服务器只会在客户端第一次请求响应时在响应头上添加Set-Cookie:“JSESSIONID=XXXXXXX”,接下来在同一个会话的第二第三次响应头里不会添加,而客户端会每次在请求头的Cookie中带上JSESSIONID信息

阅读更多

SpringMVC拦截器

一、工程构建

1.引入SpringMVC需要的jar包

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

阅读更多