Java 刷新后缓存共享变量的Freemarker模板
我有一个SpringMVCWeb应用程序,它使用FreeMarker渲染视图,并提出了以下问题 在我的FreeMarker配置中,我声明了一个singletonspringbean作为FreeMarker变量,在我的应用程序中,我提供了动态刷新singletonbean的机制(bean包含从DB检索到的应用程序配置) 现在的问题是,刷新时,以前呈现的FreeMarker模板使用旧版本中的值,但如果我导航到自容器启动以来未呈现的页面,它将使用新值 以下是我的FreeMarker配置的一个片段:Java 刷新后缓存共享变量的Freemarker模板,java,spring,templates,caching,freemarker,Java,Spring,Templates,Caching,Freemarker,我有一个SpringMVCWeb应用程序,它使用FreeMarker渲染视图,并提出了以下问题 在我的FreeMarker配置中,我声明了一个singletonspringbean作为FreeMarker变量,在我的应用程序中,我提供了动态刷新singletonbean的机制(bean包含从DB检索到的应用程序配置) 现在的问题是,刷新时,以前呈现的FreeMarker模板使用旧版本中的值,但如果我导航到自容器启动以来未呈现的页面,它将使用新值 以下是我的FreeMarker配置的一个片段: &
<!-- FreeMarker config -->
<bean id="freemarkerViewConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths">
<array>
<value>/WEB-INF/freemarker</value>
<value>classpath:/WEB-INF/freemarker</value>
</array>
</property>
<property name="freemarkerSettings">
<props>
<prop key="datetime_format">dd/MM/yyyy</prop>
<prop key="number_format">#</prop>
<prop key="whitespace_stripping">true</prop>
<prop key="auto_import">
spring.ftl as spring,
custom-macros.ftl as custom,
</prop>
</props>
</property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape"/>
<entry key="html_escape" value-ref="fmHtmlEscape"/>
<entry key="config" value-ref="config"/>
</map>
</property>
</bean>
当访问尚未呈现但无法识别已访问页面上的更改的页面时,使用此配置将选择刷新的配置模型
我尝试了以下方法来强制“刷新”变量,但没有成功:
ps我使用的是Spring v3.1.1.RELEASE和FreeMarker v2.3.19,这不是一个很好的解决方案,但我已经解决了我的问题,但老实说,这更像是一种黑客行为 我使用以下命令更改了刷新配置的代码,因此只重新创建了配置bean:
((DefaultListableBeanFactory) beanFactory).destroySingleton("config");
然后通过删除对配置模型的引用来修改freemarker配置,因为无论我尝试了什么,都无法刷新它。因此,我的问题的解决方案是修改BaseController,应用程序中的每个控制器都对其进行了扩展,并将配置模型作为@ModelAttribute公开,从而使其可用于所有视图
正如我所说,这并不能真正解决根本问题,但我已经解决了我的问题,尽管是以一种非正统的方式
((DefaultListableBeanFactory) beanFactory).destroySingleton("config");