摘要:默認(rèn)情況下,應(yīng)用會裝配一些功能組件。在大多數(shù)應(yīng)用場景下,可以選擇性地關(guān)閉一下自動裝配的組件,以達(dá)到提升性能的目的。了解更多更多關(guān)于應(yīng)用性能優(yōu)化內(nèi)容,請參考微服務(wù)實(shí)戰(zhàn)系列課堂,其中將有系統(tǒng)和深入的討論。
默認(rèn)情況下,Spring Boot Web 應(yīng)用會裝配一些功能組件 Bean。
在大多數(shù) Web 應(yīng)用場景下,可以選擇性地關(guān)閉一下自動裝配的Spring 組件 Bean,以達(dá)到提升性能的目的。
配置項(xiàng)優(yōu)化 Spring Boot Web 應(yīng)用加速 完整配置項(xiàng)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配置項(xiàng)匯總
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration, org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration, org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration關(guān)閉 Web 請求跟蹤 自動裝配 org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration
顧名思義,該自動裝配用跟蹤 Web 請求,通過Servlet Filter org.springframework.boot.actuate.trace.WebRequestTraceFilter 記錄請求的信息(如:請求方法、請求頭以及請求路徑等),其計(jì)算的過程存在一定的開銷,使用場景罕見,故可選擇關(guān)閉。
配置項(xiàng)
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfigurationorg.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration
當(dāng)org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration關(guān)閉后,其請求信息存儲介質(zhì)org.springframework.boot.actuate.trace.TraceRepository沒有存在的必要,故可選擇關(guān)閉。
配置項(xiàng)
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration關(guān)閉 Web 請求結(jié)果指標(biāo) 自動裝配 org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration
該組件將自動裝配org.springframework.boot.actuate.autoconfigure.MetricsFilter,該 Filter
主要記錄Web 請求結(jié)果指標(biāo)(如:相應(yīng)狀態(tài)碼、請求方法執(zhí)行時(shí)間等),該信息一定程度上與反向代理服務(wù)器(nginx)功能重疊,故可選擇關(guān)閉。
配置項(xiàng)
spring.autoconfigure.exclude = org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration可關(guān)閉 Servlet Web 組件 org.springframework.web.filter.HttpPutFormContentFilter
引入版本
org.springframework.web.filter.HttpPutFormContentFilter 由 Spring
Framework 3.1 版本引入,分發(fā)在 org.springframework:spring-web 中。
使用場景
通常 Web 場景中,瀏覽器通過 HTTP GET 或者 POST 請求 提交 Form 數(shù)據(jù),而非瀏覽
器客戶端(如應(yīng)用程序)可能通過 HTTP PUT 請求來實(shí)現(xiàn)。
當(dāng) HTTP 請求頭Content-Type 為 application/x-www-form-urlencoded 時(shí)
,F(xiàn)orm 數(shù)據(jù)被 encoded。而 Servlet 規(guī)范中, ServletRequest.getParameter*()
方法僅對 HTTP POST 方法支持請求參數(shù)的獲取,如:
public intetfacce ServletRequest { ...... public String getParameter(String name); public EnumerationgetParameterNames(); public String[] getParameterValues(String name); public Map getParameterMap(); ...... }
故 以上方法無法支持 HTTP PUT 或 HTTP PATCH 請求方法(請求頭Content-Type
為application/x-www-form-urlencoded)。
org.springframework.web.filter.HttpPutFormContentFilter 正是這種場景的解
決方案。
Spring Boot 默認(rèn)場景下,將
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 在絕大
多數(shù) Web 使用場景下為非必須組件。
配置項(xiàng)
如果應(yīng)用依賴 Spring Boot 版本 為 1.4.1.RELEASE 以及更高的版本,可通過如下配置,
進(jìn)行將 org.springframework.web.filter.HttpPutFormContentFilter 關(guān)閉:
spring.mvc.formcontent.putfilter.enabled = falseorg.springframework.web.filter.HiddenHttpMethodFilter
引入版本
org.springframework.web.filter.HiddenHttpMethodFilter 由 Spring
Framework 3.0 版本引入,分發(fā)在 org.springframework:spring-web 中。
使用場景
當(dāng) Web 服務(wù)端同一資源(URL)提供了多請求方法的實(shí)現(xiàn),例如 URI :/update 提供了
HTTP POST 以及 HTTP PUT 實(shí)現(xiàn)),通常 Web 場景中,瀏覽器僅支持 HTTP GET
或者 POST 請求方法,這樣的話,瀏覽器無法發(fā)起 HTTP PUT 請求。
為了瀏覽器可以消費(fèi) HTTP PUT 資源, 需要在服務(wù)端將 HTTP POST 轉(zhuǎn)化成
HTTP PUT 請求,為了解決這類問題,Spring 引入
org.springframework.web.filter.HiddenHttpMethodFilter Web 組件。
當(dāng)瀏覽器 發(fā)起 HTTP POST 請求時(shí),可通過增加請求參數(shù)(默認(rèn)參數(shù)名稱:"_method")
的方式,進(jìn)行HTTP 請求方法切換,
org.springframework.web.filter.HiddenHttpMethodFilter 獲取參數(shù)"_method"
值后,將參數(shù)值作為 HttpServletRequest#getMethod()的返回值,給后續(xù) Servlet
實(shí)現(xiàn)使用。
出于通用性的考慮,org.springframework.web.filter.HiddenHttpMethodFilter
通過調(diào)用 #setMethodParam(String) 方法,來修改轉(zhuǎn)換請求方法的參數(shù)名稱。
Spring Boot 默認(rèn)場景下,將
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 也是特殊
場景下所需,故可以關(guān)閉之。
配置項(xiàng)
按目前最新的 Spring Boot 1.5.2.RELEASE 版本中實(shí)現(xiàn),也沒有提供類似
spring.mvc.formcontent.putfilter.enabled 這樣的配置項(xiàng)關(guān)閉,無法關(guān)閉。
更多關(guān)于 Spring Boot Web 應(yīng)用性能優(yōu)化內(nèi)容,請參考《Java 微服務(wù)實(shí)戰(zhàn)系列課堂》,其中將有系統(tǒng)和深入的討論。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/76482.html
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
摘要:框架具有輕便,開源的優(yōu)點(diǎn),所以本譯見構(gòu)建用戶管理微服務(wù)五使用令牌和來實(shí)現(xiàn)身份驗(yàn)證往期譯見系列文章在賬號分享中持續(xù)連載,敬請查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對身份進(jìn)行驗(yàn)證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護(hù)REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:認(rèn)證鑒權(quán)與權(quán)限控制在微服務(wù)架構(gòu)中的設(shè)計(jì)與實(shí)現(xiàn)一引言本文系認(rèn)證鑒權(quán)與權(quán)限控制在微服務(wù)架構(gòu)中的設(shè)計(jì)與實(shí)現(xiàn)系列的第一篇,本系列預(yù)計(jì)四篇文章講解微服務(wù)下的認(rèn)證鑒權(quán)與權(quán)限控制的實(shí)現(xiàn)。 java 開源項(xiàng)目收集 平時(shí)收藏的 java 項(xiàng)目和工具 某小公司RESTful、共用接口、前后端分離、接口約定的實(shí)踐 隨著互聯(lián)網(wǎng)高速發(fā)展,公司對項(xiàng)目開發(fā)周期不斷縮短,我們面對各種需求,使用原有對接方式,各端已經(jīng)很...
閱讀 1738·2021-11-15 11:37
閱讀 3483·2021-09-28 09:44
閱讀 1738·2021-09-07 10:15
閱讀 2858·2021-09-03 10:39
閱讀 2753·2019-08-29 13:20
閱讀 1358·2019-08-29 12:51
閱讀 2268·2019-08-26 13:44
閱讀 2186·2019-08-23 18:02