<progress id="7nnbd"><big id="7nnbd"><em id="7nnbd"></em></big></progress>

<big id="7nnbd"><meter id="7nnbd"></meter></big>
<progress id="7nnbd"><meter id="7nnbd"><cite id="7nnbd"></cite></meter></progress><meter id="7nnbd"></meter>

      <address id="7nnbd"></address>

          為了賬號安全,請及時綁定郵箱和手機立即綁定

          Spring Boot Web 應用性能優化

          2018.07.24 10:00 4249瀏覽

          默認情況下,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-Typeapplication/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 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(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 由 Spring
          Framework 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 這樣的配置項關閉,無法關閉。

          了解更多?

          更多關于 Spring Boot Web 應用性能優化內容,請參考《Spring Boot 2.0深度實踐之核心技術篇》的“第5章 Web MVC 視圖應用”,其中將有系統和深入的討論。

          點擊查看更多內容

          本文原創發布于慕課網 ,轉載請注明出處,謝謝合作

          17人點贊

          若覺得本文不錯,就分享一下吧!

          評論

          相關文章推薦

          正在加載中
          意見反饋 邀請有獎 幫助中心 APP下載
          官方微信

          舉報

          0/150
          提交
          取消
          五福彩票 钦州 | 琼海 | 马鞍山 | 三门峡 | 海拉尔 | 荆州 | 新泰 | 高雄 | 六盘水 | 四平 | 德清 | 锡林郭勒 | 青州 | 金昌 | 徐州 | 三沙 | 博尔塔拉 | 宁国 | 大兴安岭 | 建湖 | 阳泉 | 鄂州 | 海南海口 | 白城 | 红河 | 赣州 | 玉环 | 宁波 | 姜堰 | 章丘 | 徐州 | 徐州 | 普洱 | 泰州 | 宜都 | 任丘 | 海安 | 淮南 | 余姚 | 库尔勒 | 五家渠 | 湘西 | 桐乡 | 鄂尔多斯 | 莒县 | 吉林 | 东阳 | 澳门澳门 | 河池 | 章丘 | 定西 | 昭通 | 阿克苏 | 漯河 | 运城 | 丽江 | 保山 | 通辽 | 克拉玛依 | 遂宁 | 青州 | 汕头 | 无锡 | 广西南宁 | 廊坊 | 天门 | 十堰 | 泰兴 | 昌吉 | 鸡西 | 汝州 | 景德镇 | 桓台 | 四川成都 | 黄山 | 延安 | 溧阳 | 雄安新区 | 延边 | 平潭 | 桐乡 | 江苏苏州 | 自贡 | 南阳 | 莒县 | 唐山 | 松原 | 温州 | 海南海口 | 晋江 | 滨州 | 启东 | 象山 | 鄂尔多斯 | 襄阳 | 亳州 | 泰兴 | 临猗 | 济源 | 大同 | 天门 | 甘孜 | 滨州 | 鹤岗 | 宁德 | 黔西南 | 普洱 | 阳春 | 白山 | 定州 | 日照 | 绥化 | 鹤岗 |