自由标记未加载远程模板



我正在使用Spring MVC和freemarker作为我的视图解析器,(这并不重要)我有多个模板加载器定义如下:

    <bean id="urlTemplateLoader" class="com.URLTemplateLoader">
        <property name="baseUrl" value="http://xxxx:8080/ftl/"/>
    </bean>
    <bean id="defaultTemplateLoader" class="com.WebappTemplateLoader">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> 
    </bean>
    <bean id="multiTemplateLoader" class="freemarker.cache.MultiTemplateLoader">
        <constructor-arg>
          <list>
            <ref bean="urlTemplateLoader"/>   
            <ref bean="defaultTemplateLoader"/> 
          </list>
        </constructor-arg>
    </bean>

这旨在首先检查 CMS 服务器,然后使用本地文件。 视图解析程序定义如下:

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="preTemplateLoaders" ref="multiTemplateLoader"/>  
        <property name="freemarkerSettings">
            <props>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="localized_lookup">false</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="template_update_delay">0</prop>
            </props>
        </property>  
    </bean>

现在的问题是,如果文件在第一次查找时不在远程服务器上,则在服务器重新启动之前,它永远不会再次检查。我将template_update_delay设置为 0,所以一旦它在那里,每当我更新它时,它都会自动拉取新的,这很好,但是我如何让它再次检查它是否首先不存在?

正如 MultiTemplateLoader 的 JavaDoc 所说:

在每个请求中,加载程序按照它们在提供给构造函数的加载器数组中出现的顺序进行查询。但是,如果其中一个加载程序过去已经满足了对某个模板名称的请求,则首先查询该加载程序(软关联)。

我将在 2.3.24(预计在 3 月初)中向其添加一个 sticky 属性(启用/禁用"软亲和力"),但直到 3.0.0 或类似的东西我才能更改其默认值。同时,您可以在自定义TemplateLoader中执行此操作(复制粘贴MultiTemplateLoader的源代码,然后从中删除亲和力部分......应该很容易)。

最新更新