2012-12-14 43 views
4

我想要獲取已經在TemplateCache(這是私有的,隱藏在配置後面)的模板列表。FreeMarker獲取TemplateCache中的緩存模板列表

我正在嘗試爲模板寫一個小的管理界面,並顯示已經緩存的內容,並在特定模板上調用configuration.removeTemplateFromCache(String),而不是所有內容(clearTemplateCache將清除太多並導致太多文件IO)。我的選擇是在一個Set中保存一個模板名稱的並行列表,並將其作爲一個鍵列表使用,但如果FreeMarker提供了這個以保持一致性,那將會很好。

此外,它有一個原因隱藏TemplateCache內容後面的配置(同時允許通過公鑰刪除鍵,但不是一個鍵列表)。看起來像一個反模式。

回答

1

TemplateCache是一種實現細節(我猜它是公開的,因爲Java不允許它只對FreeMarker包可見)。更好的問題是爲什麼你不能從Configuration得到CacheStorage。無論如何,就你的問題而言,FreeMarker甚至都不知道模板列表,因爲CacheStorage接口不提供任何查詢方法。但是,您可以通過Configuration.setCacheStorage插入您自己的CacheStorage實現,該實現提供此類方法,並將引用保存在FreeMarker之外的某個位置。是的,你不能只從Configuration得到它......但在光明的一面,你可以監視緩存活動,不過你喜歡。

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

+0

我添加了一個設置來跟蹤我放入的內容並使用它來顯示內容並刪除它們以刷新緩存。似乎工作正常。 –