让你的spring boot应用 支持HTTP2
最近比较流行的http2协议,在spring boot中可以使用了,昨兄圆天看了spring boot 官方文档 发现目前只有undertow和tomcat 服务器才支持而目前spring boot 集成的Tomcat 8.5.x 支持http2稍微麻烦点,需要用到 tomcat-native。启动的时候要加上 -Djava.library.path=/usr/local/opt/tomcat-native/lib 不然会报错
这里伍局我就拿undertow举例,关键配置如下:
application.properties
pom.xml
然后羡橘塌写一个Controller,借助google浏览器的一个插件就可以检测你搭建的http2是否成功了
聊聊springboot2的httptrace
本文主要研究下springboot2的码竖httptrace
spring-boot-actuator-autoconfigure-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceAutoConfiguration.java
spring-boot-actuator-2.0.1.RELEASE-sources.jar!/org/springframework/boot/梁悉actuate/迟渣大trace/http/InMemoryHttpTraceRepository.java
spring-boot-actuator-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/trace/http/HttpExchangeTracer.java
spring-boot-actuator-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/web/trace/servlet/HttpTraceFilter.java
spring-boot-actuator-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/web/trace/reactive/HttpTraceWebFilter.java
spring-boot-actuator-autoconfigure-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/autoconfigure/trace/http/HttpTraceEndpointAutoConfiguration.java
spring-boot-actuator-2.0.1.RELEASE-sources.jar!/org/springframework/boot/actuate/trace/http/HttpTraceEndpoint.java
输出实例
httptrace默认是开的,对于servlet及reactive的方式,分别使用了不同的filter,前者是HttpTraceFilter继承了OncePerRequestFilter,后者是HttpTraceWebFilter继承了WebFilter。可以自定义替换掉InMemoryHttpTraceRepository,自己将请求日志异步传递到日志中心。
SpringBoot实现http请求的异步长轮询【2】— AsyncHandlerInterceptor方式
客户端调用服务端接口,服务端这个接口比较耗时。为了优化服务端的性能。
服务端收到servlet请求后,释放掉servlet占用罩喊的线程资源。开启一个异步线程去处理耗时的操作。当耗时操作处理完成后,将结果返回给客户端。
注意:在此期间,客户端和服务端的http链接并不会断开,客户端依旧苦苦等待响应数据;
可以使用接口AsyncHandlerInterceptor实现来拦截涉及异步处答猛理的请求,而不是使用HandlerInterceptor。
HandlerInterceptorAdapter适配器,适配了AsyncHandlerInterceptor和HandlerInterceptor,推荐使用这个来实现。
上文说到,释放Servlet线程,交由指定的线程池去处理,那清闷桥么如何去定义指定的线程池?
注意:方法返回的是Callable。
执行效果如下图所示:
SpringMVC-使用AsyncHandlerInterceptor拦截异步处理请求
SpringBoot 三种拦截http请求方式Filter,interceptor和aop
SpringBoot 三种拦截http请求方式Filter,interceptor和aop。
这三种拦截方式的拦截顺序是:filter—Interceptor--ControllerAdvice--@Aspect --Controller;
这三种方式的区陪昌别:
1.过滤器Filter可以拿到原始的HTTP请求和响应的信息, 但是拿不到你真正处理请求方法的信芦此扒息,也就是方法的信息。
2.拦截扒型器Interceptor可以拿到原始的HTTP请求和响应的信息,也可以拿到你真正处理请求方法的信息,但是拿不到传进参数的那个值。
3.切片Aspect,既然Spring那么支持AOP,可以拿到原始的HTTP请求和响应的信息, 也可以拿到你真正处理请求方法的信息,也可以传进参数的那个值。
实现Filter接口
实现 HandlerInterceptor 接口,然后配置进Spring。
配置进spring
pom.xml 添加Aop支持