SpringBoot 如何實(shí)時(shí)刷新靜態(tài)文件
你是否受夠了每次修改靜態(tài)文件都要重啟服務(wù)器?
有時(shí)候在一些公司前后端的職責(zé)沒有那么的明確,往往后臺(tái)人員也要去寫一些頁面,像jsp頁面,或者其他的后臺(tái)模板頁面等。默認(rèn)情況下Java文件會(huì)被編譯為class文件,并且靜態(tài)資源文件也被一并的編譯進(jìn)class目錄下面,這樣導(dǎo)致我們每次修改靜態(tài)文件都要重新編譯進(jìn)class目錄,很麻煩,有沒有什么簡便的方案呢?
方案
Spring Boot在MVC中有個(gè)WebMvcProperties的配置類,還有個(gè)ResourceProperties資源配置類。
默認(rèn)情況下Spring Boot從下面的目錄下尋找靜態(tài)資源文件
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
默認(rèn)的靜態(tài)資源路徑匹配為/**。
修改Spring Boot配置,注意static-locations為靜態(tài)資源在自己電腦中的絕對(duì)路徑配置
spirng resources: chain: cache: false static-locations: file:///Users/aihe/Desktop/taqu/ticket-system/src/main/resources/static/,file:///Users/aihe/Desktop/taqu/ticket-system/src/main/resources/ mvc: static-path-pattern: /static/**
以后再修改靜態(tài)文件的時(shí)候,js,html,css等即可立即生效,也不需要熱部署的插件什么的。算是一個(gè)小tip吧~
SpringBoot靜態(tài)資源不重啟刷新,自定義配置
經(jīng)常做Spring Boot開發(fā),有很多時(shí)候不需要前后端分離,比如后管系統(tǒng)。開發(fā)的時(shí)候每次修改頁面就需要重啟,極度不方便。其實(shí)Spring Boot設(shè)計(jì)是不需要重啟的,只是我們沒注意用法而已。
1. demo
pom & main
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.6.RELEASE</version> </dependency> </dependencies>
@SpringBootApplication public class BootMain { public static void main(String[] args) { SpringApplication.run(BootMain.class, args); } }
靜態(tài)資源文件,查詢官方docs文檔放在"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"任意目錄,即可加載
啟動(dòng)main,訪問http://localhost:8082/index.html,筆者自定義了端口
2. 如何不重啟修改生效
其實(shí)很簡單,Spring Boot生效的目錄在target目錄,并非我們的resource目錄
Spring Boot只認(rèn)target,我們修改的resources怎么會(huì)自動(dòng)編譯target呢,所以要重啟了!?
解決方法有很多,常見的有mvn compile即可,或者自動(dòng)編譯(不推薦,因?yàn)橘Y源文件,java也會(huì)編譯),其實(shí)有一種非常簡單的方法
每次修改后,右鍵,recompile即可,我已經(jīng)修改了,來試試
生效了,?
3. 原理
了解原理有利于我們自定義Spring Boot,從根源上來使用它
可以看到,靜態(tài)資源加載的代碼是
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/")
里面的參數(shù)請(qǐng)自動(dòng)忽略,因?yàn)槲覀兛梢宰远x
這是為什么很多教程說自定義這個(gè)方法即可,不重啟刷新靜態(tài)資源,因?yàn)榻坛淌侵付速Y源文件的路徑,編譯后的路徑就是資源路徑
常用的自定義spring.mvc.staticPathPattern = "/**",默認(rèn)/**,配置pattern,url的路徑參數(shù)
@ConfigurationProperties(prefix = "spring.mvc") public class WebMvcProperties { private String staticPathPattern = "/**";
spring.resources.staticLocations = classpath:/html/,默認(rèn)如下,這是Spring Boot默認(rèn)配置的的路徑
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false) public class ResourceProperties { private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" }; /** * Locations of static resources. Defaults to classpath:[/META-INF/resources/, * /resources/, /static/, /public/]. */ private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
小結(jié)一下
遇到很多問題,不能人云亦云,百度啥的,其實(shí)很簡單,看一下Spring源碼,試一下,一切都很簡單。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON
本篇文章主要介紹了java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON,Jackson將Java對(duì)象轉(zhuǎn)換成json對(duì)象和xml文檔,同樣也可以將json、xml轉(zhuǎn)換成Java對(duì)象,有興趣的可以了解一下。2017-02-02java編程無向圖結(jié)構(gòu)的存儲(chǔ)及DFS操作代碼詳解
這篇文章主要介紹了java編程無向圖結(jié)構(gòu)的存儲(chǔ)及DFS操作代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12使用sharding-jdbc實(shí)現(xiàn)水平分庫+水平分表的示例代碼
本文主要介紹了使用sharding-jdbc實(shí)現(xiàn)水平分庫+水平分表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12java對(duì)象轉(zhuǎn)成byte數(shù)組的3種方法
這篇文章主要為大家詳細(xì)介紹了java對(duì)象轉(zhuǎn)成byte數(shù)組的3種方法,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2018-06-06Java8 Stream Collectors收集器使用方法解析
這篇文章主要介紹了Java8 Stream Collectors收集器使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08