freemarker熱部署(Intellij Idea)


IntelliJ + springmvc + freemarker 開發環境 緩存設置

2015-05-26 13:31

通過閱讀源碼搞定了

  1. 先查看web.xml的緩存控制。這是最高優先級的緩存控制,如果開了緩存,生成的頁面就會緩存在tomcat里。
  2. 再設置springmvc的緩存控制。一旦springmvc發現沒有緩存開啟,就會進行cache,如果發現緩存沒開啟,則會每次生成一個view(通過調用freemarker的方法來進行)。
  3. 再設置freemakre的緩存控制。freemakre通過一個時間長度來控制緩存
  4. 在上面兩步完成之后,一般來說就可以了。但是還有一個問題是,web訪問的是target目錄下的classpath和WEB-INFO目錄,而我們開發環境修改的模板文件不是target目錄下。這就要求IntelliJ要有熱部署功能,也就是在修改文件后,能自動更新target目錄下的文件數據。

web.xml 緩存

如果web.xml里面存在類似下面的代碼,就要把它注釋掉,否則修改freemarker頁面再刷新瀏覽器是不會生效的。

<filter>
<filter-name>productCacheFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
<init-param>
<param-name>cacheName</param-name>
<param-value>product</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>productCacheFilter</filter-name>
<url-pattern>/product/list/*</url-pattern>
</filter-mapping>
這段代碼是采用ehcache來緩存頁面。

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.

開發環境下為false, 線上環境是true, 避免所有緩存

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 ,因此每次在刷新 free marker頁面時,均會進行修改時間 的校驗,判斷是否應該重新載入。

IntelliJ 熱部署設置

通過熱部署,就可以在更改任意文件時,都不用重啟,就可以將文件或數據拷貝到 target目錄下。


免責聲明!

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



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