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目录下。

  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/cglWorkBook/p/4799450.html
Copyright © 2011-2022 走看看