0

我在我的网络项目中使用嵌入式码头,osgi。

我想在运行时更改 web 项目中 freemarker 文件中的代码。实现它的最佳方法是什么?

此致。

4

1 回答 1

2

假设模板将在 Web 应用程序的控制下被替换,当您知道模板已被替换时,您可以调用Configuration.removeTemplateFromCache它,这样可以保证下一个Configuration.getTemplate将返回新文件。这也意味着您不必template_update_delay在生产服务器上设置较低的值。

更棘手的问题是,当您替换文件时,FreeMarker 是否会意外看到部分替换或完全锁定(无法打开)的文件。在开发过程中,您不在乎,因为它的机会几乎为 0,但在生产服务器上您却在乎。这取决于TemplateLoader实现,然后是其背后的存储。就像它是由数据库支持的一样,肯定没有这样的风险。对于File-s,我想可能会有这样的故障。不幸的是,您不能强制 FreeMarker 在替换模板时将模板保留在模板缓存中。TemplateLoader但是你可以在-level上实现非常相似的东西。您可以创建一个自定义TemplateLoader,您可以告诉类似myTemplateLoader.mirrorToMemory(fileName)的内容,然后替换文件,然后调用myTemplateLoader.releaseMirrorOf(fileName). 然后像我之前所说的那样使模板缓存条目无效。

于 2013-09-26T13:25:38.907 回答