- 博客(16)
- 收藏
- 关注
原创 CommandLineRunner和ApplicationRunner接口
在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执行时机为容器启动完成的时候。这两个接口中有一个run方法,我们只需要实现这个方法即可。这两个接口的不同之处在于:ApplicationRunn...
2018-11-13 23:35:42 586
原创 获取用户请求的IP
在为服务平台设计IP白名单或者黑名单的时候,不能通过request.getRemoteAddr()获取IP地址,因为用户可能通过代理服务器来访问,因此需求对于需要获取用户的IP,需要对其进行特殊处理 public class IPUtils { private static Logger logger = LoggerFactory.getLogger(IPUtils.clas...
2018-11-13 22:04:06 1642 1
原创 借助ApplicationContextAware接口获取spring容器的工具类
@Componentpublic class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationCont...
2018-11-13 22:01:04 710
原创 自定义注解、lock、aop实现注解锁
1、自定义的锁注解@Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Servicelock { String description() default "";}...
2018-11-13 21:59:22 3163 1
原创 springboot2配置swagger
@Configuration@EnableSwagger2public class Swagger2 { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) ...
2018-11-13 21:56:09 299
原创 Redisson 实现分布式锁
初始化redission链接/**在初始化数据时候,最好不要使用static{} 即静态块。因为在多核机器的情况下读取配置文件,会抛出java.lang.NoClassDefFoundError: Could not initialize class XXX。所以最好还是使用init的方式,在启动程序的时候手动执行下。 */import org.redisson.Redisson;...
2018-11-13 21:53:23 890
原创 aop切面记录请求日志
@Aspect@Componentpublic class WebLogAspect { private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution(public * com.ls.demo.controller.*.*(...
2018-11-13 21:46:35 575
原创 Mysql中的存储过程简介
1、什么是存储过程简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;2、存储有哪些特性有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功...
2018-11-11 21:13:19 1740
原创 定时推送后台数据到前台websocket和sse实现
前言:本文的实现环境基于springboot21、websocket的实现前端页面:<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" /> <title></title></head&
2018-11-11 21:04:22 4257
原创 websocket与HTTP long poll、ajax轮询简述
一、WebSocket是HTML5出的东西(协议),也可以说HTTP协议没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)。首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充。两者有交集,但是并不...
2018-11-11 20:59:26 728
原创 优化http报文传输的方案
目录1、http报文压缩2、分块传输3、获取部分内容的范围请求1、http报文压缩http报文可以采取压缩来提高传输的效率,可以在请求的头部字段Accept-Encoding中来说明客户端可以接受的压缩格式,如Accept-Encoding: gzip, deflate 常用的内容编码有以下几种。gzip(GNU zip)compress(UNIX 系统的标准压缩)d...
2018-11-10 09:54:17 1547 1
原创 常用的HTTP状态码详解
目录状态码的类别2XX 成功200 OK204 No Content206 Partial Content3XX 重定向301 Moved Permanently302 Found303 See Other304 Not Modified307 Temporary Redirect4XX 客户端错误400 Bad Request401 Una...
2018-11-10 09:52:07 941
原创 session详解
简述session机制。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识------------称为session id,如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这...
2018-11-09 23:45:36 649
原创 http请求和响应
目录1、HTTP请求报文格式1)、GET2)、POST2、HTTP响应报文格式3、HTTP请求方法说明4、请求头部5、响应头部6、响应的状态码7、HTTP请求GET和POST的区别8、http短链接和长连接的区别1、HTTP请求报文格式HTTP请求报文主要由请求行、请求头部、空行、请求正文四部分组成(可选部分,比如GET请求就没有请求正文),其中空行...
2018-11-09 23:41:47 310
原创 cookie
存储在用户本地终端的数据,http请求自动发送,跨域除外用途:客户端记录用户信息特点:存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。属性name:cookie名称value:cookie值domain:可以访问cookie的域名,某一级域名可以访问上一级级域名的cookieexpires/Ma...
2018-11-09 23:31:54 263
原创 乐观锁和悲观锁
1、悲观锁(Pessimistic Lock)每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。2、乐观锁(Optimistic Lock) 每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期...
2018-11-09 23:29:02 177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人