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