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>