Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件的問(wèn)題
Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件
起因
因甲方加了一個(gè)緊急的需求: 需要搞一個(gè)文件上傳和下載功能.
我心中想:這不簡(jiǎn)單,搞個(gè)資源服務(wù)器,將上傳文件放上去,然后訪問(wèn)資源鏈接就行了.
但接下來(lái)甲方爸爸說(shuō) 不需要這莫麻煩,直接將文件放服務(wù)器里,用的時(shí)候下載到資源文件夾下就行.
我心里想: 我擦嘞 還能這樣!! 然后小心心翼翼的說(shuō) 有資源服務(wù)器會(huì)更好的進(jìn)行統(tǒng)一管理,
說(shuō)了些缺點(diǎn)..但人不想.哎! 那就擼代碼吧 結(jié)果就發(fā)生一個(gè)莫名奇妙的事情.
原因
idea中項(xiàng)目啟動(dòng),在將文件下載到資源路徑下時(shí)報(bào)問(wèn)題如下:
class path resource [***] cannot be resolved to URL because it does not exist
資源文件找不到錯(cuò)誤,我擦.
然后樓主就翻了下編譯后的文件夾
看到問(wèn)題沒(méi),這里竟然少了一個(gè)資源文件夾.可樓主都配置了啊
配置如下:
maven配置:

資源文件文件夾配置:

就很奇,為啥編譯后target->class下沒(méi)有static
然后樓主就開(kāi)始了長(zhǎng)達(dá)20分鐘的查找.百度的結(jié)果很亂,但都不能解決問(wèn)題
最終樓主決定下去抽個(gè)煙!?。?/p>
思考
下去抽煙時(shí) 樓主就思考.配置路徑正確,文件路徑也沒(méi)問(wèn)題,為啥編譯后沒(méi)生成!
接下來(lái)樓主突然想到了種問(wèn)題,會(huì)不會(huì)是資源文件下沒(méi)有資源 導(dǎo)致maven在進(jìn)行打包時(shí)會(huì)默認(rèn)過(guò)濾掉沒(méi)有資源的文件夾!
驗(yàn)證

樓主在static文件夾下 扔了一個(gè)文件 編譯了下 然后就好使了.

就很神奇.
復(fù)盤
maven在編譯的時(shí)候 會(huì)過(guò)濾掉空文件夾,咱們?cè)谑褂玫臅r(shí)候 增加默認(rèn)文件就好
Springboot靜態(tài)資源加載不到,并且配置了也不生效
問(wèn)題描述,以及歷程
寫項(xiàng)目的時(shí)候?qū)肓艘粋€(gè)前端項(xiàng)目,加載的時(shí)候發(fā)現(xiàn),竟然404,我估計(jì)就是沒(méi)掃描到靜態(tài)資源,我就跟之前一樣寫了一個(gè)配置類:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
? ? @Override
? ? protected void addResourceHandlers(ResourceHandlerRegistry registry) {
? ? ? ? registry.addResourceHandler("/**")
? ? ? ? ? ? ? ? .addResourceLocations("classpath:/static/")
? ? ? ? ? ? ? ? .addResourceLocations("classpath:/templates/");
? ? ? ? super.addResourceHandlers(registry);
? ? }
}然后發(fā)現(xiàn)也不生效,
我就去搜,發(fā)現(xiàn)了各種配置的方法,繼承這個(gè)類的,或者實(shí)現(xiàn)那個(gè)方法的,網(wǎng)上一搜一大堆,都不行,然后我又試了用配置文件配置,也就是yml,因?yàn)橛玫膖hymeleaf引擎模板的,所以,也配置了些thymeleaf的配置,能好點(diǎn),起碼能訪問(wèn)到首頁(yè)的html了,但是依然靜態(tài)資源加載不到,
還有說(shuō)那個(gè)pom文件有那個(gè)過(guò)濾的,把那個(gè)刪了就好,我查過(guò)那個(gè)問(wèn)題了,我沒(méi)有那個(gè)過(guò)濾的。
解決問(wèn)題
經(jīng)過(guò)一下午的排查,與搜索,終于找到了解決方法:我用的springBoot版本的問(wèn)題:2.6.x就會(huì)有問(wèn)題,需要引入配置,才能生效:
Springboot-2.6.x所使用到的spring mvc-5.3.x 默認(rèn)的路徑匹配策略改變了:
Spring MVC 處理程序映射匹配請(qǐng)求路徑的默認(rèn)策略已從 AntPathMatcher 更改為PathPatternParser。所以我們得給他設(shè)置回去
spring: ? ? ? mvc: ? ? ? ? pathmatch: ? ? ? ? ? matching-strategy: ant_path_matcher
之后再使用前面的幾種方法就ok了,哪個(gè)生效用哪個(gè)。
或者,直接降boot的版本。
總結(jié)
如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
相關(guān)文章
Spring Cloud Gateway 內(nèi)存溢出的解決方案
這篇文章主要介紹了Spring Cloud Gateway 內(nèi)存溢出的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
解決nacos修改配置信息后需要重啟服務(wù)才能生效的問(wèn)題
當(dāng)配置信息發(fā)生變動(dòng)時(shí),傳統(tǒng)修改配置信息后,需要重新重啟服務(wù)器才可以生效,大量應(yīng)用配置修改時(shí),需要一個(gè)個(gè)修改配置,無(wú)法統(tǒng)一修改,且沒(méi)有辦法回溯配置版本,所以本文給大家介紹了如何解決這些問(wèn)題的方法,需要的朋友可以參考下2023-10-10
Springboot整合Shiro使用yml文件管理Urls方式
這篇文章主要介紹了Springboot整合Shiro使用yml文件管理Urls方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2026-03-03
java啟動(dòng)參數(shù)之謎的排查過(guò)程
在日常操作中,相信很多人對(duì)Java啟動(dòng)參數(shù)存在疑惑,下面這篇文章主要給大家介紹了關(guān)于java啟動(dòng)參數(shù)之謎的排查過(guò)程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
解決IDEA中Maven下載依賴包過(guò)慢或報(bào)錯(cuò)的問(wèn)題
由于公司項(xiàng)目迭代,越來(lái)越多的項(xiàng)目開(kāi)始轉(zhuǎn)型新版本,由于我對(duì)Java一直不感冒,但要順應(yīng)公司項(xiàng)目要求,遂自己要逐步開(kāi)始完善Java相關(guān)的知識(shí)層面,此篇是我在學(xué)習(xí)SpringBoot時(shí)對(duì)一些不懂地方及遇到問(wèn)題時(shí)的記錄,需要的朋友可以參考下2024-02-02
關(guān)于Java中String創(chuàng)建的字符串對(duì)象內(nèi)存分配測(cè)試問(wèn)題
這篇文章主要介紹了Java中String創(chuàng)建的字符串對(duì)象內(nèi)存分配測(cè)試,給大家詳細(xì)介紹了在創(chuàng)建String對(duì)象的兩種常用方法比較,通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07
利用JavaFX工具構(gòu)建Reactive系統(tǒng)
這篇文章主要介紹了使用JavaFX構(gòu)建Reactive系統(tǒng),利用JavaFX工具集中的新的超棒特性來(lái)構(gòu)建響應(yīng)式的快速應(yīng)用程序,感興趣的小伙伴們可以參考一下2016-02-02
Springboot自動(dòng)配置與@Configuration配置類詳解
這篇文章主要介紹了SpringBoot中的@Configuration與自動(dòng)配置,在進(jìn)行項(xiàng)目編寫前,我們還需要知道一個(gè)東西,就是SpringBoot對(duì)我們的SpringMVC還做了哪些配置,包括如何擴(kuò)展,如何定制,只有把這些都搞清楚了,我們?cè)谥笫褂貌艜?huì)更加得心應(yīng)手2022-07-07

