1. 程式人生 > >springmvc + freemarker 開發環境 快取設定

springmvc + freemarker 開發環境 快取設定

通過閱讀原始碼搞定了

  1. 先設定springmvc的快取控制。這是最高優先順序的快取控制。一旦springmvc發現沒有快取開啟,就會進行cache,如果發現快取沒開啟,則會每次生成一個view(通過呼叫freemarker的方法來進行)。
  2. 再設定freemakre的快取控制。freemakre通過一個時間長度來控制快取
  3. 在上面兩步完成之後,一般來說就可以了。但是還有一個問題是,web訪問的是target目錄下的classpath和WEB-INFO目錄,而我們開發環境修改的模板檔案不是target目錄下。這就要求IntelliJ要有熱部署功能,也就是在修改檔案後,能自動更新target目錄下的檔案資料。

springmvc 設定解析器 快取設定

<bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="suffix" value=".ftl"/>
    <property name="order" value="0"/>
    <property name="contentType" value="text/html;charset=UTF-8"/>
    <!-- 此變數值為pageContext.request, 頁面使用方法:rc.contextPath -->
    <property name="requestContextAttribute" value="rc"/>
    <property name="cache" value="false"/>
</bean>

這裡關鍵是讓 cache設定為 false.

freemarker 快取設定

<!-- 配置FreeMarkerConfigurer -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
    <property name="freemarkerSettings">
        <props>
            <prop key="template_update_delay">0</prop>
        </props>
    </property>
</bean>

這裡關鍵是設定 template_update_delay 為0 ,0標示不檢測模板,每次都重新載入,因此每次在重新整理 free marker頁面時,均會進行修改時間 的校驗,判斷是否應該重新載入。

freemarker,每次儲存時都會重新啟動下面給出了相應的解決辦法:

1.FreeMarker 通過將模版檔案的內容進行快取,來降低模版檔案讀取的頻次,降低系統的負載。

2.當處理某個模版時,FreeMarker 直接從快取中返回對應的 Template 物件,並有一個預設的機制來保證該模版物件是跟模版檔案同步的
template_update_delay 用來指定更新模版檔案的間隔時間,相當於多長時間檢測一下是否有必要重新載入模版檔案。

0 表示不檢測模板,每次都重新載入,否則為多少毫秒鐘檢測一下模版是否更改。

3.所以修改freemarker.properties內容為:

template_update_delay=0

即修改ftl,不重啟tomcat, 可以看到所修改的內容。