溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談Spring Boot Web 應用性能優化

發布時間:2020-08-24 01:57:32 來源:腳本之家 閱讀:176 作者:mercyblitz 欄目:編程語言

默認情況下,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.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-Typeapplication/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.HiddenHttpMethodFilter Web 組件。

當瀏覽器 發起 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 這樣的配置項關閉,無法關閉。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女