SpringBoot靜態資源解決瀏覽器緩存的方案和字體圖標的處理


系統上線后,如果js、css、圖片等靜態資源修改,發布后因為用戶客戶端瀏覽器的緩存,會導致修改不能馬上生效,怎么解決?

SpringBoot提供了一種簡單有效的方式:

1、將ResourceUrlProvider 添加到Spring中:

@ControllerAdvice
public class ResourceUrlProviderController {
    @Autowired
    private ResourceUrlProvider resourceUrlProvider;

    @ModelAttribute("urls")
    public ResourceUrlProvider urls() {
        return this.resourceUrlProvider;
    }
}

 

2、yml或properties文件中增加配置

  resources:
    chain:
      strategy:
        content:
          enabled: true
          paths: /**

這種方式將在靜態文件路徑后增加Md5字符串,字符串的值根據文件內容自動生成,所以在文件內容改變時自動改變。

還有一種方式是在靜態文件路徑里增加版本號:

resources:
   chain:
      strategy:
          fixed:
             enabled: true
             paths: /**
             version: v版本號

3、頁面引用靜態資源

<script type="text/javascript" src="${urls.getForLookupPath('/static/js/login.js')}"></script>

4、效果:

MD5方式:

<script type="text/javascript" src="/static/js/login-83aa9d307823c9e7a55cc37b7ad3bdfc.js"></script>

版本號方式:

<script type="text/javascript" src="/static/v2.0.0/js/login.js"></script>

5、字體圖標的問題

使用這種方式解決了靜態資源緩存問題后,帶來了一個問題,fontawsome、glyphicons等字體圖標被服務端攔截了,不能正常加載,需要在pom文件中增加配置:

<build>
        <plugins>
            ......
            <!--解決加上靜態資源緩存刷新策略后,字體圖標不顯示的問題-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                ......
                <!--解決加上靜態資源緩存刷新策略后,字體圖標不顯示的問題-->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <configuration>
                        <encoding>utf-8</encoding>
                        <useDefaultDelimiters>true</useDefaultDelimiters>
                        <nonFilteredFileExtensions>
                            <nonFilteredFileExtension>woff</nonFilteredFileExtension>
                            <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
                            <nonFilteredFileExtension>eot</nonFilteredFileExtension>
                            <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
                            <nonFilteredFileExtension>svg</nonFilteredFileExtension>
                        </nonFilteredFileExtensions>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <resources>
            ......
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
</build>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM