【问题标题】:FreeMarker get list of cached templates in TemplateCacheFreeMarker 获取 TemplateCache 中缓存模板的列表
【发布时间】:2012-12-14 23:10:18
【问题描述】:

我正在尝试获取已在 TemplateCache 中的模板列表(这是私有的并隐藏在配置后面)。

我正在尝试向模板编写一个小的管理 UI 并显示已缓存的内容并在特定模板上调用 configuration.removeTemplateFromCache(String) 而不是所有内容(clearTemplateCache 将清除太多并导致太多文件 IO)。我的替代方法是在 Set 中保留模板名称的并行列表并将其用作键列表,但如果 FreeMarker 提供此内容以保持一致性会很好。

另外,将TemplateCache 内容隐藏在配置后面是有原因的(同时允许通过公共方法通过密钥删除,但不允许通过密钥列表删除)。似乎是一种反模式。

【问题讨论】:

    标签: java freemarker


    【解决方案1】:

    TemplateCache 是一种实现细节(我猜它是公开的,因为 Java 不允许它仅对 FreeMarker 包可见)。更好的问题是为什么你不能从Configuration 得到CacheStorage。无论如何,就您的问题而言,甚至 FreeMarker 都不知道模板列表,因为 CacheStorage 接口不提供任何查询方法。但是,您可以通过提供此类方法的Configuration.setCacheStorage 插入您自己的CacheStorage 实现,并将对它的引用保留在 FreeMarker 之外的某个位置。是的,你不能只从Configuration 获得它有点尴尬......但从好的方面来说,你可以随意监控缓存活动。

    更新: FreeMarker 2.3.20 有Configuration.getCacheStorage(),所以它不再隐藏了。

    【讨论】:

    • 我添加了一个 Set 来跟踪我输入的内容,并使用它来显示内容并删除它们以刷新缓存。似乎工作正常。
    猜你喜欢
    • 2010-09-19
    • 2015-10-06
    • 2015-06-13
    • 1970-01-01
    • 2020-08-06
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多