前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot Web 应用性能优化

Spring Boot Web 应用性能优化

作者头像
Criss@陈磊
发布2019-08-01 18:51:50
7460
发布2019-08-01 18:51:50
举报
文章被收录于专栏:测试技术圈测试技术圈

配置项优化

Spring Boot Web 应用加速 完整配置项

代码语言:javascript
复制
management.add-application-context-header = false
spring.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

配置项汇总

代码语言:javascript
复制
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration

关闭 Web 请求跟踪 自动装配

代码语言:javascript
复制
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration

顾名思义,该自动装配用跟踪 Web 请求,通过Servlet Filter

代码语言:javascript
复制
org.springframework.boot.actuate.trace.WebRequestTraceFilter

记录请求的信息(如:请求方法、请求头以及请求路径等),其计算的过程存在一定的开销,使用场景罕见,故可选择关闭。

  • 配置项
代码语言:javascript
复制
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
代码语言:javascript
复制
org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration

代码语言:javascript
复制
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration

关闭后,其请求信息存储介质

代码语言:javascript
复制
org.springframework.boot.actuate.trace.TraceRepository

没有存在的必要,故可选择关闭。

  • 配置项
代码语言:javascript
复制
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration

关闭 Web 请求结果指标 自动装配

代码语言:javascript
复制
org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration

该组件将自动装配,

代码语言:javascript
复制
org.springframework.boot.actuate.autoconfigure.MetricsFilter

该 Filter主要记录Web 请求结果指标(如:相应状态码、请求方法执行时间等),该信息一定程度上与反向代理服务器(nginx)功能重叠,故可选择关闭。

  • 配置项
代码语言:javascript
复制
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration

可关闭 Servlet Web 组件

代码语言:javascript
复制
org.springframework.web.filter.HttpPutFormContentFilter
  • 引入版本
代码语言:javascript
复制
org.springframework.web.filter.HttpPutFormContentFilter

由 Spring Framework 3.1 版本引入,分发在

代码语言:javascript
复制
org.springframework:spring-web 

中。

  • 使用场景

通常 Web 场景中,浏览器通过 HTTP GET 或者 POST 请求 提交 Form 数据,而非浏览器客户端(如应用程序)可能通过 HTTP PUT 请求来实现。

当 HTTP 请求头Content-Typeapplication/x-www-form-urlencoded 时 ,Form 数据被 encoded。而 Servlet 规范中, ServletRequest.getParameter*()

方法仅对 HTTP POST 方法支持请求参数的获取,如:

代码语言:javascript
复制
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-Typeapplication/x-www-form-urlencoded)。

代码语言:javascript
复制
org.springframework.web.filter.HttpPutFormContentFilter

正是这种场景的解决方案。

Spring Boot 默认场景下,将

代码语言:javascript
复制
org.springframework.web.filter.HttpPutFormContentFilter

代码语言:javascript
复制
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration

自动装配,以下为 Spring Boot 1.4.1.RELEASE 以及更好版本定义(可能存在一定的差异):

代码语言:javascript
复制
@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();
    }

    ......

}

综上所述,

代码语言:javascript
复制
org.springframework.web.filter.HttpPutFormContentFilter

在绝大多数 Web 使用场景下为非必须组件。

  • 配置项

如果应用依赖 Spring Boot 版本 为 1.4.1.RELEASE 以及更高的版本,可通过如下配置,进行将

代码语言:javascript
复制
org.springframework.web.filter.HttpPutFormContentFilter

关闭:

代码语言:javascript
复制
spring.mvc.formcontent.putfilter.enabled = false
代码语言:javascript
复制
org.springframework.web.filter.HiddenHttpMethodFilter
  • 引入版本
代码语言:javascript
复制
org.springframework.web.filter.HiddenHttpMethodFilter

由 Spring Framework 3.0 版本引入,分发在

代码语言:javascript
复制
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 引入

代码语言:javascript
复制
org.springframework.web.filter.HiddenHttpMethodFilter

Web 组件。

当浏览器 发起 HTTP POST 请求时,可通过增加请求参数(默认参数名称:"_method")的方式,进行HTTP 请求方法切换,

代码语言:javascript
复制
org.springframework.web.filter.HiddenHttpMethodFilter

获取参数"_method"值后,将参数值作为

代码语言:javascript
复制
HttpServletRequest#getMethod()

的返回值,给后续 Servlet实现使用。

出于通用性的考虑,

代码语言:javascript
复制
org.springframework.web.filter.HiddenHttpMethodFilter

通过调用

代码语言:javascript
复制
#setMethodParam(String)

方法,来修改转换请求方法的参数名称。

Spring Boot 默认场景下,将

代码语言:javascript
复制
org.springframework.web.filter.HttpPutFormContentFilter

代码语言:javascript
复制
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration

自动装配,以下为 Spring Boot 1.4.1.RELEASE 以及更好版本定义(可能存在一定的差异):

代码语言:javascript
复制
@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();
    }

    ......

}

综上所述,

代码语言:javascript
复制
org.springframework.web.filter.HiddenHttpMethodFilter

也是特殊场景下所需,故可以关闭之。

  • 配置项

按目前最新的 Spring Boot 1.5.2.RELEASE 版本中实现,也没有提供类似

代码语言:javascript
复制
spring.mvc.formcontent.putfilter.enabled 

这样的配置项关闭,无法关闭。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 质问 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring Boot Web 应用加速 完整配置项
  • 配置项汇总
  • 关闭 Web 请求跟踪 自动装配
  • 关闭 Web 请求结果指标 自动装配
  • 可关闭 Servlet Web 组件
相关产品与服务
全球应用加速
全球应用加速(Global Application Acceleration Platform,GAAP)基于全球部署的节点和线路,通过高速通道、智能路由及安全防护技术,实现数据高速、稳定、安全的跨地域传输,帮助业务解决全球用户访问卡顿或者延迟过高的问题。通过图形化配置界面,只需几分钟,即可通过高速通道访问您的业务源站,并通过控制台查看通道的运行情况。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档