我在我的网络项目中使用嵌入式码头,osgi。
我想在运行时更改 web 项目中 freemarker 文件中的代码。实现它的最佳方法是什么?
此致。
假设模板将在 Web 应用程序的控制下被替换,当您知道模板已被替换时,您可以调用Configuration.removeTemplateFromCache
它,这样可以保证下一个Configuration.getTemplate
将返回新文件。这也意味着您不必template_update_delay
在生产服务器上设置较低的值。
更棘手的问题是,当您替换文件时,FreeMarker 是否会意外看到部分替换或完全锁定(无法打开)的文件。在开发过程中,您不在乎,因为它的机会几乎为 0,但在生产服务器上您却在乎。这取决于TemplateLoader
实现,然后是其背后的存储。就像它是由数据库支持的一样,肯定没有这样的风险。对于File
-s,我想可能会有这样的故障。不幸的是,您不能强制 FreeMarker 在替换模板时将模板保留在模板缓存中。TemplateLoader
但是你可以在-level上实现非常相似的东西。您可以创建一个自定义TemplateLoader
,您可以告诉类似myTemplateLoader.mirrorToMemory(fileName)
的内容,然后替换文件,然后调用myTemplateLoader.releaseMirrorOf(fileName)
. 然后像我之前所说的那样使模板缓存条目无效。