【问题标题】:How to preload freemarker templates?如何预加载 freemarker 模板?
【发布时间】:2019-10-05 07:24:57
【问题描述】:

我们正在使用 URLTemplateLoader 加载托管在 Web 服务器上的模板。 我的模板引擎应用程序是多线程的。
但是,如果有多个请求进入,我们确实将模板缓存“打开” HTTP 429 Too Many Requests 响应

我们如何事先缓存模板?

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    我想出的一种解决方法是让一个主模板具有#include 所有模板,并在缓存到期时使用调度程序执行主模板。此过程在点击 freemarker 模板中的#include 时下载缓存。

    【讨论】:

    • 您可以致电Configuration.getTemplate 获取这些模板。我想这样更干净。
    【解决方案2】:

    您可以在TemplateLoader 实现中实现限制,并将其设置为Configuration 中的模板加载器。它应该只委托给另一个 TemplateLoader,但要在其周围添加限制。

    虽然,如果源服务器(现在提供 429)在真正只是被要求履行职责时更加宽容,这可能会更好。

    【讨论】:

    • 请详细建议(示例),如何在我的 TemplateLoader 中实现节流?所有并发线程都有自己的 TemplateLoader 实例。
    • @RamneekHanda 为什么所有线程都有自己的TemplateLoaderTemplateLoader 通常是单例。无论如何,在TemplateLoader 中,您可以使用在所有线程之间共享的Semaphore,并且只有在线程从Semaphore 获得许可后才进行HTTP 请求。因此,您的应用程序将阻塞而不是淹没远程 HTTP 服务器。
    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2010-09-26
    • 2012-03-29
    相关资源
    最近更新 更多