Spring MVC Post請(qǐng)求數(shù)據(jù)量大小和參數(shù)個(gè)數(shù)限制

花了一天時(shí)間在處理一個(gè)Excel數(shù)據(jù)上傳如筛,但數(shù)據(jù)總是提交不全的問(wèn)題躁锡。
Excel解析出的內(nèi)容差不多 5000 行,每行大概 10 列筒溃,也就是 5W 左右個(gè)數(shù)據(jù)马篮。
整個(gè)過(guò)程需要上傳、預(yù)覽怜奖、建立字段映射后浑测,再提交,保存到數(shù)據(jù)庫(kù)歪玲。

這個(gè)吐血的Bug尽爆,前前后后差不多調(diào)試了5、6個(gè)小時(shí)读慎。

前面的幾步統(tǒng)統(tǒng)SO Easy漱贱,輕松解決,但是提交這5W個(gè)數(shù)據(jù)時(shí)夭委,遇到一個(gè)坑幅狮。

  1. SpringMVC 接收List/數(shù)組大小默認(rèn)限制為256個(gè)

簡(jiǎn)單搜索下網(wǎng)頁(yè),輕松找到了解決辦法株灸。

在需要問(wèn)題發(fā)生的Controller中崇摄,增加

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.setAutoGrowNestedPaths(true);
    binder.setAutoGrowCollectionLimit(Integer.MAX_VALUE);
}

考慮不想以后再重復(fù)處理,將這段代碼放到了@ControlerAdvice標(biāo)注的全局Controller異常處理器類中慌烧。

網(wǎng)上給出的全局配置比較麻煩逐抑,官方文檔給出的是基于XML的配置方法,考慮項(xiàng)目使用的SpringBoot屹蚊,想?yún)⒖甲鯦ava Config沒(méi)成功厕氨。

試著放到@ControlerAdvice標(biāo)注的類中,貌似成功了汹粤,后來(lái)又搜了一遍官方文檔:

@Controller or @ControllerAdvice classes can have @InitBinder methods that initialize instances of WebDataBinder

哈命斧,原來(lái)確實(shí)可以這么干!

  1. Post方式發(fā)送請(qǐng)求嘱兼,SpringMVC 接收為空

無(wú)論怎么發(fā)送国葬,服務(wù)端收到始終是null,貌似數(shù)據(jù)被丟棄芹壕,沒(méi)有被正確接收汇四。

同樣搜索一番,發(fā)現(xiàn)是服務(wù)器對(duì)Post大小限制的問(wèn)題踢涌。
不是理論上Post大小無(wú)限嗎通孽?現(xiàn)實(shí)是,大多服務(wù)器都進(jìn)行了容量限制斯嚎,如 Tomcat 默認(rèn)Post請(qǐng)求的數(shù)據(jù)大小是2M利虫。

看帖子挨厚,翻Tomcat Doc堡僻,找到解決方法是:
(1)使用 Tomcat 作為服務(wù)器
修改Tomcat server.xml配置糠惫,取消Post請(qǐng)求大小限制

  <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="19443"
  maxPostSize="-1"/>

關(guān)鍵部分是在Connector元素中增加 maxPostSize屬性,并設(shè)置為 -1钉疫,表示不限制硼讽。

注意:Tomcat版本有差異,7之前設(shè)置0牲阁,之后(包括7)設(shè)置-1固阁。

(2)使用SpringBoot內(nèi)嵌的Tomcat

SpringBoot嵌入的Tomcat也提供了對(duì)應(yīng)的配置

  • servet.tomcat.max-http-post-size=-1

兩種我都修改了。

  1. 超級(jí)巨坑城菊,請(qǐng)求參數(shù)個(gè)數(shù)限制默認(rèn)為10000

那個(gè)Bug來(lái)的备燃,防不勝防啊,凌唬,并齐,開發(fā)不易,產(chǎn)品且用且珍惜客税。

按理說(shuō)况褪,折騰這么久,問(wèn)題應(yīng)該解決了更耻,但是無(wú)論怎么測(cè)試數(shù)據(jù)只能接受到1111個(gè)VO對(duì)象测垛。

這時(shí)候我仍以為是Post數(shù)據(jù)大小限制的修改沒(méi)有生效,繼續(xù)重啟多次秧均,測(cè)試N遍食侮,問(wèn)題依舊,數(shù)量不增不減目胡,始終只能接收1111個(gè)VO對(duì)象過(guò)來(lái)疙描。

折磨了2個(gè)多小時(shí),心力交瘁讶隐,無(wú)心編程起胰。算了,睡2小時(shí)去(周日在家巫延,非上班時(shí)間)效五。

睡醒,夜半炉峰,挑燈再戰(zhàn)畏妖。

Chrome關(guān)鍵時(shí)刻也不給力,想查看請(qǐng)求數(shù)據(jù)量大小疼阔,卡戒劫、卡半夷、卡,緩慢出來(lái)一看3144834迅细,這應(yīng)該不算大吧巫橄。

重新搜索:SpringMVC List 個(gè)數(shù)限制

突然找到 "Tomcat配置,參數(shù)個(gè)數(shù)maxParameterCount默認(rèn)個(gè)數(shù)10000"茵典。

簡(jiǎn)單計(jì)算一番1111個(gè)VO對(duì)象湘换,剛好,每個(gè)有9個(gè)屬性值统阿,正好約1W彩倚,一口老血。

解決辦法:

  <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="19443" maxPostSize="-1" maxParameterCount="-1"/>

中間也走了一些歧途扶平,嘗試配置過(guò)maxHttpHeaderSize ="102400" maxSwallowSize="-1"帆离。

不能嘆氣,容易老结澄。

問(wèn)題解決了哥谷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市概而,隨后出現(xiàn)的幾起案子呼巷,更是在濱河造成了極大的恐慌,老刑警劉巖赎瑰,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件王悍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡餐曼,警方通過(guò)查閱死者的電腦和手機(jī)压储,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)源譬,“玉大人集惋,你說(shuō)我怎么就攤上這事〔饶铮” “怎么了刮刑?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)养渴。 經(jīng)常有香客問(wèn)我雷绢,道長(zhǎng),這世上最難降的妖魔是什么理卑? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任翘紊,我火速辦了婚禮,結(jié)果婚禮上藐唠,老公的妹妹穿的比我還像新娘帆疟。我一直安慰自己鹉究,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布踪宠。 她就那樣靜靜地躺著自赔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪殴蓬。 梳的紋絲不亂的頭發(fā)上匿级,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天蟋滴,我揣著相機(jī)與錄音染厅,去河邊找鬼。 笑死津函,一個(gè)胖子當(dāng)著我的面吹牛肖粮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尔苦,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼允坚!你這毒婦竟也來(lái)了魂那?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稠项,失蹤者是張志新(化名)和其女友劉穎涯雅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體展运,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡活逆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拗胜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔗候。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖埂软,靈堂內(nèi)的尸體忽然破棺而出锈遥,到底是詐尸還是另有隱情,我是刑警寧澤勘畔,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布所灸,位于F島的核電站,受9級(jí)特大地震影響咖杂,放射性物質(zhì)發(fā)生泄漏庆寺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一诉字、第九天 我趴在偏房一處隱蔽的房頂上張望懦尝。 院中可真熱鬧知纷,春花似錦、人聲如沸陵霉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)踊挠。三九已至乍桂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間效床,已是汗流浹背睹酌。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剩檀,地道東北人憋沿。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沪猴,于是被迫代替她去往敵國(guó)和親辐啄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354