SpringBoot 如何實(shí)時(shí)刷新靜態(tài)文件
你是否受夠了每次修改靜態(tài)文件都要重啟服務(wù)器?
有時(shí)候在一些公司前后端的職責(zé)沒(méi)有那么的明確,往往后臺(tái)人員也要去寫(xiě)一些頁(yè)面,像jsp頁(yè)面,或者其他的后臺(tái)模板頁(yè)面等。默認(rèn)情況下Java文件會(huì)被編譯為class文件,并且靜態(tài)資源文件也被一并的編譯進(jìn)class目錄下面,這樣導(dǎo)致我們每次修改靜態(tài)文件都要重新編譯進(jìn)class目錄,很麻煩,有沒(méi)有什么簡(jiǎn)便的方案呢?
方案
Spring Boot在MVC中有個(gè)WebMvcProperties的配置類(lèi),還有個(gè)ResourceProperties資源配置類(lèi)。
默認(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開(kāi)發(fā),有很多時(shí)候不需要前后端分離,比如后管系統(tǒng)。開(kāi)發(fā)的時(shí)候每次修改頁(yè)面就需要重啟,極度不方便。其實(shí)Spring Boot設(shè)計(jì)是不需要重啟的,只是我們沒(méi)注意用法而已。
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)資源文件,查詢(xún)官方docs文檔放在"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"任意目錄,即可加載

啟動(dòng)main,訪問(wèn)http://localhost:8082/index.html,筆者自定義了端口

2. 如何不重啟修改生效
其實(shí)很簡(jiǎn)單,Spring Boot生效的目錄在target目錄,并非我們的resource目錄

Spring Boot只認(rèn)target,我們修改的resources怎么會(huì)自動(dòng)編譯target呢,所以要重啟了!?
解決方法有很多,常見(jiàn)的有mvn compile即可,或者自動(dòng)編譯(不推薦,因?yàn)橘Y源文件,java也會(huì)編譯),其實(shí)有一種非常簡(jiǎn)單的方法

每次修改后,右鍵,recompile即可,我已經(jīng)修改了,來(lái)試試

生效了,?
3. 原理
了解原理有利于我們自定義Spring Boot,從根源上來(lái)使用它

可以看到,靜態(tài)資源加載的代碼是
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/")
里面的參數(shù)請(qǐng)自動(dòng)忽略,因?yàn)槲覀兛梢宰远x
這是為什么很多教程說(shuō)自定義這個(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é)一下
遇到很多問(wèn)題,不能人云亦云,百度啥的,其實(shí)很簡(jiǎn)單,看一下Spring源碼,試一下,一切都很簡(jiǎn)單。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java 非對(duì)稱(chēng)加密算法DH實(shí)現(xiàn)詳解
這篇文章主要介紹了java 非對(duì)稱(chēng)加密算法DH實(shí)現(xiàn)詳解 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼
二維碼在現(xiàn)代社交和營(yíng)銷(xiāo)活動(dòng)中被廣泛使用,本文主要介紹了SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02
Security框架:如何使用CorsFilter解決前端跨域請(qǐng)求問(wèn)題
這篇文章主要介紹了Security框架:如何使用CorsFilter解決前端跨域請(qǐng)求問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java fastjson解析json字符串實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java fastjson解析json字符串實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Java使用poi實(shí)現(xiàn)excel的導(dǎo)入操作指南
使用Apache Poi是一種流行且廣泛使用的方式,可以幫助開(kāi)發(fā)人員直接從Java代碼中讀取、寫(xiě)入和處理Excel文件,因此在這篇文章我們將著重介紹如何實(shí)現(xiàn)excel的導(dǎo)入,感興趣的朋友可以跟著小編一起來(lái)學(xué)習(xí)2023-06-06
SpringBoot消息國(guó)際化配置實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了SpringBoot消息國(guó)際化配置實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

