zoukankan      html  css  js  c++  java
  • 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目录下。

  • 相关阅读:
    C++静态库与动态库(转)
    Tornado异步
    Yacc与Lex
    云数据库
    linux如何查看端口被谁占用
    Innodb Double Write
    MySQL GTIDs(global transaction identifiers)
    Java并发编程:线程池的使用
    Oracle 建立索引及SQL优化
    解决redhat linux下IP地址可以ping通,域名无法ping通问题
  • 原文地址:https://www.cnblogs.com/cglWorkBook/p/4799450.html
Copyright © 2011-2022 走看看