浅谈Spring Boot Web 应用性能优化
默认情况下,Spring Boot Web 应用会装配一些功能组件 Bean。
在大多数 Web 应用场景下,可以选择性地关闭一下自动装配的Spring 组件 Bean,以达到提升性能的目的。
配置项优化
Spring Boot Web 应用加速 完整配置项
management.add-application-context-header = falsespring.mvc.formcontent.putfilter.enabled = false spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\ org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\ org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\ org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\ org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\ org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
配置项汇总
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
关闭 Web 请求跟踪 自动装配
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
顾名思义,该自动装配用跟踪 Web 请求,通过
Servlet Filter org.springframework.boot.actuate.trace.WebRequestTraceFilter记录请求的信息(如:请求方法、请求头以及请求路径等),其计算的过程存在一定的开销,使用场景罕见,故可选择关闭。
配置项
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration
当
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration关闭后,其请求信息存储介质
org.springframework.boot.actuate.trace.TraceRepository没有存在的必要,故可选择关闭。
配置项
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration
关闭 Web 请求结果指标 自动装配
org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
该组件将自动装配
org.springframework.boot.actuate.autoconfigure.MetricsFilter,该 Filter主要记录Web 请求结果指标(如:相应状态码、请求方法执行时间等),该信息一定程度上与反向代理服务器(nginx)功能重叠,故可选择关闭。
配置项
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
可关闭 Servlet Web 组件
org.springframework.web.filter.HttpPutFormContentFilter
引入版本
org.springframework.web.filter.HttpPutFormContentFilter由 Spring Framework 3.1 版本引入,分发在
org.springframework:spring-web中。
使用场景
通常 Web 场景中,浏览器通过 HTTP GET 或者 POST 请求 提交 Form 数据,而非浏览器客户端(如应用程序)可能通过 HTTP PUT 请求来实现。
当 HTTP 请求头Content-Type 为 application/x-www-form-urlencoded 时,Form 数据被 encoded。而 Servlet 规范中, ServletRequest.getParameter*()方法仅对 HTTP POST 方法支持请求参数的获取,如:
public intetfacce ServletRequest { ...... public String getParameter(String name); public Enumeration<String> getParameterNames(); public String[] getParameterValues(String name); public Map<String, String[]> getParameterMap(); ...... }
故 以上方法无法支持 HTTP PUT 或 HTTP PATCH 请求方法(请求头
Content-Type为
application/x-www-form-urlencoded)。
org.springframework.web.filter.HttpPutFormContentFilter正是这种场景的解决方案。
Spring Boot 默认场景下,将
org.springframework.web.filter.HttpPutFormContentFilter被
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration自动装配,以下为 Spring Boot1.4.1.RELEASE 以及更好版本定义(可能存在一定的差异):
@Configuration @ConditionalOnWebApplication @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class }) @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class }) public class WebMvcAutoConfiguration { ...... @Bean @ConditionalOnMissingBean(HttpPutFormContentFilter.class) @ConditionalOnProperty(prefix = "spring.mvc.formcontent.putfilter", name = "enabled", matchIfMissing = true) public OrderedHttpPutFormContentFilter httpPutFormContentFilter() { return new OrderedHttpPutFormContentFilter(); } ...... }
综上所述,
org.springframework.web.filter.HttpPutFormContentFilter在绝大多数 Web 使用场景下为非必须组件。
配置项
如果应用依赖 Spring Boot 版本 为 1.4.1.RELEASE 以及更高的版本,可通过如下配置,进行将
org.springframework.web.filter.HttpPutFormContentFilter关闭:
spring.mvc.formcontent.putfilter.enabled = false
org.springframework.web.filter.HiddenHttpMethodFilter
引入版本
org.springframework.web.filter.HiddenHttpMethodFilter由 SpringFramework 3.0 版本引入,分发在
org.springframework:spring-web中。
使用场景
当 Web 服务端同一资源(URL)提供了多请求方法的实现,例如 URI :/update 提供了HTTP POST 以及 HTTP PUT 实现),通常 Web 场景中,浏览器仅支持 HTTP GET或者 POST 请求方法,这样的话,浏览器无法发起 HTTP PUT 请求。
为了浏览器可以消费 HTTP PUT 资源, 需要在服务端将 HTTP POST 转化成HTTP PUT 请求,为了解决这类问题,Spring 引入
org.springframework.web.filter.HiddenHttpMethodFilterWeb组件。
当浏览器 发起 HTTP POST 请求时,可通过增加请求参数(默认参数名称:"_method")的方式,进行HTTP 请求方法切换,
org.springframework.web.filter.HiddenHttpMethodFilter获取参数"_method"值后,将参数值作为
HttpServletRequest#getMethod()的返回值,给后续 Servlet实现使用。
出于通用性的考虑,
org.springframework.web.filter.HiddenHttpMethodFilter通过调用
#setMethodParam(String)方法,来修改转换请求方法的参数名称。
Spring Boot 默认场景下,将
org.springframework.web.filter.HttpPutFormContentFilter被
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration自动装配,以下为 Spring Boot 1.4.1.RELEASE 以及更好版本定义(可能存在一定的差异):
@Configuration @ConditionalOnWebApplication @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class }) @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class }) public class WebMvcAutoConfiguration { ...... @Bean @ConditionalOnMissingBean(HiddenHttpMethodFilter.class) public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { return new OrderedHiddenHttpMethodFilter(); } ...... }
综上所述,org.springframework.web.filter.HiddenHttpMethodFilter也是特殊场景下所需,故可以关闭之。
配置项
按目前最新的 Spring Boot 1.5.2.RELEASE 版本中实现,也没有提供类似spring.mvc.formcontent.putfilter.enabled 这样的配置项关闭,无法关闭。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- IBM Rational助您轻松完成基于J2EE的Web应用系统的性能测试和性能优化
- web应用性能优化经验总结
- web应用性能优化--采用gzip静态压缩+动态压缩方式压缩js、css文件
- Spring Boot . 2 -- 用Spring Boot 创建一个Java Web 应用
- SpringCloud SpringBoot mybatis 分布式微服务(六)Spring Boot中Web应用的统一异常处理
- Web应用的性能优化思路——找到瓶颈
- Spring boot 应用有错误提示:Dynamic Web Module 3.1 requires Java 1.7 or newer.
- WEB应用性能优化常规方法
- Spring Boot - Web 应用开发 - Servlet, Filter, Listener
- 利用Spring Insight + JMeter 对Web应用进行压力测试和性能评估
- Spring Boot: 开发web 应用 - 01 创建项目
- spring-boot快速搭建web应用教程一-基础环境搭建
- Spring Boot 性能优化
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十一)Web应用的统一异常处理
- Web应用的性能优化思路——找到瓶颈
- Web应用性能优化思路
- 【运维小分享】基于Web应用的性能分析及优化案例详解
- Spring Boot 性能优化
- Spring Boot干货系列:(五)开发Web应用JSP篇
- Spring Boot ---- 快速开发web应用的神器