我正在使用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,所以一旦它在那里,任何时候我更新它,它会自动拉出新的,这很棒,但是我怎么能让它再次检查它是否首先不在那里?
答案 0 :(得分:1)
正如MultiTemplateLoader
的JavaDoc所说:
在每个请求中,按照它们在提供给构造函数的加载器数组中的外观顺序查询加载器。但是,如果某个模板名称的请求过去已被其中一个加载器满足,则首先查询该加载程序(软关联)。
我将在2.3.24(预计在3月初)中添加sticky
属性(启用/禁用&#34;软亲和力&#34;),但我无法更改默认为3.0.0或类似的东西。同时,您可以使用自定义TemplateLoader
执行此操作(复制粘贴MultiTemplateLoader
的源代码,只删除它的亲和力部分......应该很容易)。