? ?????一個(gè)奇葩問(wèn)題王浴,雖然解決了脆炎,但還是沒(méi)弄清楚,小記一筆氓辣。
? ? ? ?年后回來(lái)秒裕,測(cè)試人員對(duì)年前的3次迭代的功能進(jìn)行了回歸測(cè)試,然后發(fā)現(xiàn)所有excel導(dǎo)入的功能都失效了钞啸。作為后臺(tái)開(kāi)發(fā)人員几蜻,當(dāng)然是第一時(shí)間打開(kāi)運(yùn)行日志排查原因啦。但奇怪的是体斩,后臺(tái)日志中并沒(méi)有ERROR信息......于是乎轉(zhuǎn)戰(zhàn)到前端梭稚,通過(guò)chrome的開(kāi)發(fā)工具發(fā)現(xiàn)如下異常:
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.439562935221680911.8769/work/Tomcat/localhost/ROOT] is not valid org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:112)?org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.(StandardMultipartHttpServletRequest.java:86)
.......
????????從異常信息來(lái)看,其實(shí)不難理解絮吵,就是上傳文件的臨時(shí)目錄失效了弧烤,百度以后確實(shí)如此。但是為什么過(guò)完年回來(lái)目錄就突然失效了呢源武?
? ? ? ? 繼續(xù)查詢(xún)相關(guān)資料后了解到,springboot啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)用于上傳文件的臨時(shí)目錄想幻,而系統(tǒng)會(huì)在10天后自動(dòng)清除該目錄粱栖。
解決方法:
1、重啟服務(wù)脏毯,重新生成目錄闹究;
2、手動(dòng)創(chuàng)建該目錄食店;
3渣淤、在啟動(dòng)服務(wù)的main方法中,添加以下代碼吉嫩,指定上傳文件的目錄:
@Bean
MultipartConfigElementmultipartConfigElement() {
MultipartConfigFactory factory =new MultipartConfigFactory();?
factory.setLocation("/data/apps/temp");?
return factory.createMultipartConfig();
}
4价认、在應(yīng)用的配置文件中添加以下配置,原理同3:
server:
????tomcat:
????????basedir: /data/apps/temp
????????實(shí)踐證明自娩,以上方法都沒(méi)有解決我的問(wèn)題...
????????接著用踩,我進(jìn)入到服務(wù)器的tmp目錄,發(fā)現(xiàn)里面已經(jīng)創(chuàng)建了多個(gè)tomcat的臨時(shí)文件,看日期應(yīng)該是我多次重啟產(chǎn)生的脐彩。那么正常情況下碎乃,解決方法1應(yīng)該已經(jīng)生效了(雖然不能永久性解決這個(gè)問(wèn)題),為什么還是報(bào)異常呢惠奸?令人蛋疼的是梅誓,新創(chuàng)建的臨時(shí)目錄的端口都是8491,就是我重啟的服務(wù)的端口佛南,但是異常中的臨時(shí)目錄端口是8769梗掰,而8769正是zuul網(wǎng)關(guān)的端口。于是共虑,我在zuul的配置文件里加上了解決方法4的配置信息愧怜,果然就好了...
????????令我不解的是,如果是zuul的問(wèn)題妈拌,那么一開(kāi)始應(yīng)該就無(wú)法上傳拥坛,而不會(huì)等到年后才出現(xiàn)問(wèn)題。