默认情况下,Spring Boot Web 应用会装配一些功能组件 Bean。
在大多数 Web 应用场景下,可以选择性地关闭一下自动装配的Spring 组件 Bean,以达到提升性能的目的。
配置项优化
Spring Boot Web 应用加速 完整配置项
management.add-application-context-header = false spring.mvc.formcontent.putfilter.enabled = false spring.autoconfigure.exclude = org.spring work.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.spring work.boot.autoconfigure.jmx.JmxAutoConfiguration,\ org.spring work.boot.autoconfigure.gson.GsonAutoConfiguration,\ org.spring work.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.spring work.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\ org.spring work.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\ org.spring work.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\ org.spring work.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\ org.spring work.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\ org.spring work.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\ org.spring work.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\ org.spring work.boot.autoconfigure.mustache.MustacheAutoConfiguration,\ org.spring work.boot.autoconfigure.mail.MailSenderAutoConfiguration,\ org.spring work.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\ org.spring work.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\ org.spring work.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration,\ org.spring work.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
配置项汇总
spring.autoconfigure.exclude = org.spring work.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,\ org.spring work.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration,\ org.spring work.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
关闭 Web 请求跟踪 自动装配
org.spring work.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
顾名思义,该自动装配用跟踪 Web 请求,通过Servlet Filter org.spring work.boot.actuate.trace.WebRequestTraceFilter 记录请求的信息(如:请求方法、请求头以及请求路径等),其计算的过程存在一定的开销,使用场景罕见,故可选择关闭。
配置项
spring.autoconfigure.exclude = org.spring work.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
org.spring work.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration
当org.spring work.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration关闭后,其请求信息存储介质org.spring work.boot.actuate.trace.TraceRepository没有存在的必要,故可选择关闭。
配置项
spring.autoconfigure.exclude = org.spring work.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration
关闭 Web 请求结果指标 自动装配
org.spring work.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
该组件将自动装配org.spring work.boot.actuate.autoconfigure.MetricsFilter,该 Filter主要记录Web 请求结果指标(如:相应状态码、请求方法执行时间等),该信息一定程度上与反向代理服务器(nginx)功能重叠,故可选择关闭。
配置项
spring.autoconfigure.exclude = org.spring work.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
可关闭 Servlet Web 组件
org.spring work.web.filter.HttpPutFormContentFilter
引入版本
org.spring work.web.filter.HttpPutFormContentFilter 由 Spring work 3.1 版本引入,分发在 org.spring work: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.spring work.web.filter.HttpPutFormContentFilter 正是这种场景的解决方案。
Spring Boot 默认场景下,将org.spring work.web.filter.HttpPutFormContentFilter 被org.spring work.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.spring work.web.filter.HttpPutFormContentFilter 在绝大多数 Web 使用场景下为非必须组件。
配置项
如果应用依赖 Spring Boot 版本 为 1.4.1.RELEASE 以及更高的版本,可通过如下配置,进行将 org.spring work.web.filter.HttpPutFormContentFilter 关闭:
spring.mvc.formcontent.putfilter.enabled = false
org.spring work.web.filter.HiddenHttpMethodFilter
引入版本
org.spring work.web.filter.HiddenHttpMethodFilter 由 Spring work 3.0 版本引入,分发在org.spring work:spring-web 中。
使用场景
当 Web 服务端同一资源(URL)提供了多请求方法的实现,例如 URI :/update 提供了HTTP POST 以及 HTTP PUT 实现),通常 Web 场景中,浏览器仅支持 HTTP GET或者 POST 请求方法,这样的话,浏览器无法发起 HTTP PUT 请求。
为了浏览器可以消费 HTTP PUT 资源, 需要在服务端将 HTTP POST 转化成HTTP PUT 请求,为了解决这类问题,Spring 引入org.spring work.web.filter.HiddenHttpMethodFilter Web 组件。
当浏览器 发起 HTTP POST 请求时,可通过增加请求参数(默认参数名称:"_method")的方式,进行HTTP 请求方法切换,
org.spring work.web.filter.HiddenHttpMethodFilter 获取参数"_method"值后,将参数值作为HttpServletRequest#getMethod()的返回值,给后续 Servlet实现使用。
出于通用性的考虑,org.spring work.web.filter.HiddenHttpMethodFilter通过调用 #setMethodParam(String) 方法,来修改转换请求方法的参数名称。
Spring Boot 默认场景下,将org.spring work.web.filter.HttpPutFormContentFilter 被org.spring work.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.spring work.web.filter.HiddenHttpMethodFilter 也是特殊场景下所需,故可以关闭之。
配置项
按目前最新的 Spring Boot 1.5.2.RELEASE 版本中实现,也没有提供类似spring.mvc.formcontent.putfilter.enabled 这样的配置项关闭,无法关闭。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
继续阅读与本文标签相同的文章
-
小白如何购买阿里云服务器(图文教程)?
2026-05-16栏目: 教程
-
如何最快速度参与阿里云双11拼团活动
2026-05-16栏目: 教程
-
阿里云双11活动是否值得入手价格如何配置怎样
2026-05-16栏目: 教程
-
2019阿里云双11活动-MySQL 8.0 IoT固件安全检测(包年)包年优惠
2026-05-16栏目: 教程
-
2019阿里云双11活动-MySQL 8.0 高可用版高可用版2核4G
2026-05-16栏目: 教程
